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.mzph.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…