C# | 超簡單CSV表格讀寫操作(輕松將數據保存到CSV,并支持讀取還原)

在這里插入圖片描述

C# | 超簡單CSV表格讀寫操作(輕松將數據保存到CSV,并支持讀取還原)

文章目錄

  • C# | 超簡單CSV表格讀寫操作(輕松將數據保存到CSV,并支持讀取還原)
    • 一、上位機開發中的CSV應用背景
    • 二、CSV讀寫實戰教學
      • 1. 基本對象序列化
      • 2. 多數據類型處理
      • 3. 集合類型序列化
      • 4. 二進制數據處理
      • 5. 自定義類型支持
      • 6. 表頭自定義
      • 7. 屬性忽略
      • 8. 大文件完整讀寫測試
    • 三、安裝部署指南
    • 四、感謝閱讀

一、上位機開發中的CSV應用背景

在工業自動化上位機開發中,CSV格式數據的生成與解析是常見的核心需求:

  1. 用于設備運行數據的長期記錄
  2. 實現與其他系統(如MES/ERP)的數據交換
  3. 生成可人工查閱的生產報表
  4. 調試階段數據快照保存

傳統方式通過硬編碼拼接字符串效率低下,且難以處理復雜數據結構。本文將講解如何使用CsvSerializer類輕松實現CSV文件的生成和讀取。


二、CSV讀寫實戰教學

1. 基本對象序列化

/// <summary>
/// 基本學生信息類
/// </summary>
public class SimpleStudent
{public int Id { get; set; }public string Name { get; set; }
}var students = new List<SimpleStudent>
{new SimpleStudent { Id = 1001, Name = "張三" },new SimpleStudent { Id = 1002, Name = "李四" }
};var csv = new CsvSerializer().ConvertToCsvLines(students);
File.WriteAllLines("simple_students.csv", csv);

2. 多數據類型處理

/// <summary>
/// 復合數據類型演示類
/// </summary>
public class DataTypeDemo
{public DateTime RecordTime { get; set; }   // 時間類型public float Temperature { get; set; }     // 精確數值public bool IsValid { get; set; }          // 布爾類型
}var data = new DataTypeDemo
{RecordTime = DateTime.Now,Temperature = 25.36f,IsValid = true
};var serializer = new CsvSerializer();
File.WriteAllLines("data_types.csv", serializer.ConvertToCsvLines(new[] { data }));

3. 集合類型序列化

public class CollectionDemo
{public int[] SensorValues { get; set; }          // 整型數組public List<double> Voltages { get; set; }       // 泛型列表
}var demo = new CollectionDemo
{SensorValues = new[] { 100, 200, 300 },Voltages = new List<double> { 3.3, 5.0, 12.0 }
};// 生成CSV時集合元素自動以分號分隔
var csvLines = new CsvSerializer().ConvertToCsvLines(new[] { demo });

4. 二進制數據處理

public class BinaryData
{public byte[] ImageBuffer { get; set; }  // Base64編碼存儲
}var data = new BinaryData
{ImageBuffer = File.ReadAllBytes("logo.png")
};// 生成文件提示:大量二進制數據存入單行可能導致Excel無法打開
File.WriteAllLines("data_binary.csv", serializer.ConvertToCsvLines(new[] { data }));

5. 自定義類型支持

// 定義新的結構體類型
public struct Coordinate
{public double X;public double Y;
}// 測試類型
public class CustomTypeDemo 
{ public Coordinate Position { get; set; } 
}// 注冊自定義轉換器
var serializer = new CsvSerializer();
serializer.Converters.Add(typeof(Coordinate), new StringConverter<Coordinate>(str =>{var parts = str.Split('|');return new Coordinate { X = double.Parse(parts[0]), Y = double.Parse(parts[1]) };},c => $"{c.X}|{c.Y}"
));

6. 表頭自定義

public class MachineData
{[CsvColumn("Current Speed (m/min)")]public double Speed { get; set; }[CsvColumn("Working Temp (°C)")]public double Temperature { get; set; }
}// 生成的CSV標題類似:
// Current Speed (m/min),Working Temp (°C)

7. 屬性忽略

public class SecurityData
{public string PublicInfo { get; set; }[CsvIgnore]public string SecretKey { get; set; }  // 不會出現在CSV中
}

8. 大文件完整讀寫測試

在這里插入圖片描述

生成用于測試的隨機學生信息表CSV文件:

        /// <summary>/// 生成學生信息表/// </summary>public void GenerateTestCsvFile(){var serializer = new CsvSerializer();const int dataSize = 1000;var random = new Random();var students = Enumerable.Range(0, dataSize).Select(_ => GenerateRandomStudent(random)).ToList();var csv = serializer.ConvertToCsvLines(students);File.WriteAllLines("test_data.csv", csv);// 打開文件夾Process.Start("explorer.exe", "/select," + Path.GetFullPath("test_data.csv"));Console.WriteLine($"已生成測試數據文件:{Path.GetFullPath("test_data.csv")}");}/// <summary>/// 生成隨機學生數據/// </summary>private static Student GenerateRandomStudent(Random random){return new Student{// 基礎類型Id = random.Next(10000, 99999),Name = $"Student_{random.Next(1, 1000)}",GPA = Math.Round(random.NextDouble() * 4.0, 2),// 結構體類型Location = new Point(random.Next(0, 100), random.Next(0, 100)),ClassSize = new Size(random.Next(30, 60), random.Next(20, 40)),// 集合類型Marks = Enumerable.Range(0, 5).Select(_ => random.Next(60, 100)).ToArray(),Courses = new List<string>{$"Course_{random.Next(100, 999)}",$"Course_{random.Next(100, 999)}",$"Course_{random.Next(100, 999)}"},// 特殊類型Grade = (char)('A' + random.Next(0, 5))};}/// <summary>/// 測試用學生類(覆蓋8種不同數據類型)/// </summary>private class Student{// 基礎值類型public int Id { get; set; }// 字符串類型public string Name { get; set; }// 浮點類型public double GPA { get; set; }// 結構體類型(Point)public Point Location { get; set; }// 結構體類型(Size)public Size ClassSize { get; set; }// 數組類型public int[] Marks { get; set; }// 泛型集合public List<string> Courses { get; set; }// 字符類型public char Grade { get; set; }}

讀取CSV文件,還原成對象數組:

// 讀取還原數據
var serializer = new CsvSerializer();
var loadedData = serializer.ConvertFromCsvLines<Student>(File.ReadAllLines("test_data.csv"));

三、安裝部署指南

通過NuGet包管理器安裝:
在這里插入圖片描述
通過NuGet包管理器執行:

Install-Package STTech.CodePlus

或使用.NET CLI:

dotnet add package STTech.CodePlus

四、感謝閱讀

感謝各位讀者耐心閱讀,本庫將持續迭代工業領域實用組件。如有建議可評論區留言,期待您的使用反饋!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/898425.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898425.shtml
英文地址,請注明出處:http://en.pswp.cn/news/898425.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Git push后撤銷提交

一、介紹 當某次更改完工程后&#xff0c;push了本地倉庫到云端&#xff0c;但是發現有地方改錯了&#xff0c;想撤銷這次推送&#xff0c;或者某次提交就更改了很小一部分&#xff0c;想和本地這次修改的合并為一次推送&#xff0c;省的在云端顯示特別多次提交&#xff0c;顯得…

Unity導出WebGL,無法顯示中文

問題&#xff1a;中文無法顯示 默認字體無法顯示中文 在編輯器中設置了中文和英文的按鈕&#xff0c;中文按鈕無法顯示 導出后無法顯示中文 解決辦法&#xff1a; 自己添加字體&#xff0c;導入項目&#xff0c;并引用 示例 下載一個字體文件&#xff0c;這里使用的阿里…

閱讀《Vue.js設計與實現》 -- 02

接上一篇文章&#xff1a;閱讀《Vue.js設計與實現》 – 01 文章目錄 第二章提升用戶的開發體驗tips 控制框架代碼的體積Tree-Shaking副作用 框架應該輸出怎樣的構建產物&#xff1f;注意這兩個文件有什么區別&#xff1f; 特性開關如何實現&#xff1f; 處理錯誤TS支持 第二章 …

Mac:Ant 下載+安裝+環境配置(詳細講解)

&#x1f4cc; 下載 Ant 下載地址&#xff1a;https://ant.apache.org/bindownload.cgi &#x1f4cc; 無需安裝 Apache官網下載 Ant 壓縮包&#xff0c;無需安裝&#xff0c;下載解壓后放到自己指定目錄下即可。 按我自己的習慣&#xff0c;我會在用戶 jane 目錄下新建了個…

qt圖表背景問題

從代碼來看&#xff0c;這段代碼涉及到設置背景透明度和背景可見性的操作&#xff0c;主要是在一個基于Qt框架的圖形界面程序中對某個圖表控件&#xff08;fontChart&#xff09;和視圖控件&#xff08;fontChartView&#xff09;進行操作。以下是每行代碼的作用以及它們之間的…

藍橋杯國賽子串2023動態規劃,暴力

#include <bits/stdc.h> using namespace std; // string ss; #define int long long string s; //該方法通過動態規劃&#xff0c;找到2023字串&#xff0c;而2023等于202加3&#xff0c;202等于202&#xff0c;20等于20&#xff1b; int f2() {int dp[4]{0};//dp[0]代表…

uni-app——網絡API

uni-app 網絡API 在 uni-app 開發中&#xff0c;網絡請求是獲取數據與和服務器交互的重要手段。以下介紹 uni-app 中常見的網絡 API&#xff0c;包括發起請求、上傳和下載以及 WebSocket、UDP 通信等方面。 發起請求 在 uni-app 里&#xff0c;使用uni.request(OBJECT)來發起…

計算機網絡筆記再戰——理解幾個經典的協議HTTP章3

理解幾個經典協議——HTTP章3 返回結果的HTTP狀態碼 ? 我們知道&#xff0c;ICMP可以傳遞IP通信時候的狀態如何。HTTP雖然沒有輔助的解析&#xff0c;但是它可以使用狀態碼來表達我們的HTTP請求的結果&#xff0c;標記服務器端的處理是否正常、通知出現的錯誤等工作。這就是…

國產編輯器EverEdit - Hex Dump插件:看到文本的另一面!

1 Hex Dump插件 1.1 應用場景 有時可能需要顯示字母的ASCII編碼&#xff0c;或其他文字的字節編碼&#xff0c;可以使用Hex Dump插件來完成 1.2 使用方法 安裝Hex Dump插件&#xff0c;安裝插件方法參考&#xff1a;擴展管理 在編輯器中選中文本&#xff0c;選擇擴展 -> …

《駕馭MXNet:深度剖析分布式深度學習訓練的高效之道》

在深度學習的迅猛發展進程中&#xff0c;模型的規模和復雜性持續攀升&#xff0c;對計算資源的需求也愈發苛刻。單機訓練在面對大規模數據集和復雜模型結構時&#xff0c;常常顯得力不從心。分布式深度學習訓練成為解決這一困境的關鍵途徑&#xff0c;而MXNet作為一款強大的開源…

Vue3項目開發:狀態管理實踐指南

# Vue3項目開發&#xff1a;狀態管理實踐指南 一、引言 背景介紹 在Vue項目中&#xff0c;狀態管理是一個非常重要的話題。合理的狀態管理能夠幫助我們更好地組織和管理數據&#xff0c;提升項目的可維護性和可擴展性。本文將深入探討Vue3項目中狀態管理的最佳實踐&#xff0c;…

網絡安全漏洞與修復 網絡安全軟件漏洞

文章目錄 一、軟件漏洞的概念 1、信息安全漏洞簡述2、軟件漏洞3、軟件漏洞概念4、軟件漏洞的成因分析 二、軟件漏洞標準化管理 1、軟件漏洞分類2、軟件漏洞分級3、安全漏洞管理規范 一、軟件漏洞的概念 1、信息安全漏洞簡述 信息安全漏洞是信息安風險的主要根源之一&…

SpringBoot項目controller層接收對應格式請求的相關RequestMapping配置

目錄 &#xff08;1&#xff09; &#xff08;2&#xff09; &#xff08;3&#xff09; 注&#xff1a;此情況注意和&#xff08;4&#xff09;中情況進行區分 &#xff08;4&#xff09; 在幾個springboot項目開發后&#xff0c;我總結了以下的一些常見的接收對應請求的…

2025年圖生視頻模型技術全景解析

一、開源圖生視頻模型 阿里通義萬象Wan2.1系列 I2V-14B-480P&#xff1a; 14B參數基礎模型支持480P分辨率圖生視頻顯存需求16GB以上 I2V-14B-720P&#xff1a; 高清增強版模型采用分幀渲染技術&#xff0c;輸出分辨率達1280720 技術特性&#xff1a; 支持中文提示詞自動解析內置…

一場由 ES 分片 routing 引發的問題

一場由 ES 分片 routing 引發的問題 ES 結構 {"poroperties": {"joinType": {"type": "join","eager_global_ordinals": true,"relations": {"spu": "sku"}},"id":{"type&q…

Linux信號的處理

目錄 一、信號處理概述&#xff1a;為什么需要“信號”&#xff1f; 二、用戶空間與內核空間&#xff1a;進程的“雙重人格” 三、內核態與用戶態&#xff1a;權限的“安全鎖” 四、信號捕捉的內核級實現&#xff1a;層層“安檢” 五、sigaction函數&#xff1a;精細控制信…

IntelliJ IDEA 2023.3.1安裝指南從下載到配置的完整教程(附資源下載)

安裝 IntelliJ IDEA 2023.3.1 非常簡單&#xff0c;以下是詳細的安裝步驟&#xff0c;適用于 Windows、macOS 和 Linux 系統。 1. 下載 IntelliJ IDEA IntelliJ IDEA下載鏈接&#xff1a;https://pan.quark.cn/s/3ad975664934 選擇適合你的操作系統的版本&#xff1a; Ultimat…

【HarmonyOS Next】鴻蒙中App、HAP、HAR、HSP概念詳解

【HarmonyOS Next】鴻蒙中App、HAP、HAR、HSP概念詳解 &#xff08;圖1-1&#xff09; 一、鴻蒙中App、HAP、HAR、HSP是什么&#xff1f; &#xff08;1&#xff09;App Pack&#xff08;Application Package&#xff09; 是應用發布的形態&#xff0c;上架應用市場是以App Pa…

配置阿里云yum源

配置阿里云yum源 修改默認的yum倉庫&#xff0c;把原有的移動到創建的目錄里&#xff08;踢出國外的yum源&#xff09; # 切換到/ect/yum.repos.d/目錄下 cd /etc/yum.repos.d/ # 新建repo目錄 mkdir repo # 把原有的移動到創建的目錄里 mv ./*.repo ./repo/配置yum源 # 找到…

在C#的MVC框架framework項目的使用ajax,及源碼下載

在C# MVC框架中使用AJAX實現異步請求,有助于提高應用程序的性能和用戶體驗。 在MVC框架framework項目中&#xff0c;ajax使用方法如下 1.在Controller類中&#xff0c;創建一個新的方法&#xff08;例如&#xff1a;GetRes&#xff09;&#xff0c;該方法處理AJAX請求并返回J…