C#—csv文件格式操作

news/2025/3/5 10:43:46/

C#—csv文件格式操作

目录

C#—csv文件格式操作

介绍

核心特点

结构化数据

C#操作csv示例:

写入CSV文件

读取CSV文件

CSV 的优缺点

常见使用场景

编码问题

winform操作csv文件格式实例


介绍

CSV(Comma-Separated Values,逗号分隔值)是一种简单且通用的文本文件格式,用于存储和交换表格数据(如电子表格或数据库内容)。它被广泛用于数据导入/导出、跨平台数据共享以及轻量级数据存储场景。

核心特点

纯文本格式以 .csv 为扩展名,文件内容为纯文本,无需专用软件即可查看和编辑(如记事本、VS Code)。

结构化数据

  • 每行表示一条记录(Record)。
  • 每个记录由字段(Field)组成,字段间用分隔符(逗号 ,\n换行)分隔。
  • 首行可选为表头(Header),描述字段名称。
  • 格式示列:
  • 使用记事本打开csv文件展示
  • ID,Name,Age,Email
    1,John Doe,30,john@example.com
    2,"Jane Smith, Jr.",25,jane@example.com
    3,"Bob ""The Builder""",28,bob@example.com
  • 使用wpf office打开csv文件展示

C#操作csv示例:

写入CSV文件
static void Main(){string filePath = "example.csv";using (StreamWriter sw = new StreamWriter(filePath, Encoding.UTF8)){sw.WriteLine("Name,Age,City \n"); // 写入表头sw.WriteLine("Alice,30,New York \n"); // 写入数据行sw.WriteLine("Bob,25,Los Angeles \n");}}
读取CSV文件
static void Main(){string filePath = "example.csv";using (StreamReader sr = new StreamReader(filePath, Encoding.UTF8)){while (!sr.EndOfStream){string line = sr.ReadLine();string[] values = line.Split('\n'); // 使用\n换行字符分割每行数据Console.WriteLine($"Name: {values[0]}, Age: {values[1]}, City: {values[2]}");}}}
 

CSV 的优缺点

优点 缺点
简单易读,兼容所有文本编辑器无数据类型定义(全为字符串)
跨平台(Excel、数据库、编程语言均支持)无标准化规范(分隔符、编码可能不一致)
适合大数据量快速导入导出不支持复杂结构(如嵌套数据)
无二进制内容,体积小缺乏格式控制(如字体、颜色)

  
    

常见使用场景

  1. 数据导入/导出
  2. 数据库表导出为 CSV,供其他系统使用。
  3. 从 Excel 导出数据到第三方工具(如 Python、R)。
  4. 数据交换
  5. 在不同软件(如 Salesforce、邮件营销工具)间传递客户列表。
  6. 日志记录
  7. 存储结构化日志(如时间戳、事件类型、描述)。
  8. 机器学习
  9. 存储训练数据集(如鸢尾花数据集)。


编码问题

推荐使用 UTF-8 编码保存 CSV 文件,避免中文乱码。

 StreamReader sr = new StreamReader(fileName, Encoding.UTF8);string s = sr.ReadToEnd(); // 读取数据


winform操作csv文件格式实例

效果

当点击写入按钮时则向csv文件中写入一条数据,当点击读取时则读取出所有数据。

一、在winform界面中拖入2个按钮

二、封装csv操作类

public class CSVAPI
{public void SaveData(string data,string result){string path = Directory.GetCurrentDirectory() + "\\data";if (!Directory.Exists(path)){Directory.CreateDirectory(path);}string fileName = $"{path}\\{DateTime.Now.ToString("yyyy-MM-dd")}.csv"; // 文件路径if (!File.Exists(fileName)) // 如果csv文件不存在{// FileStream 文件流// 参数1 文件操作路径// 参数2 FileMode Create 如果有则替换,如果没有 则新建// 参数3 FileAccess.Write 写入的权限FileStream fs = new FileStream(fileName,FileMode.Create,FileAccess.Write);// StreamWriter 写入工具StreamWriter sw = new StreamWriter(fs,Encoding.Default);StringBuilder sb = new StringBuilder(); // 定义可变字符串,保存存储的数据sb.Append("时间").Append(",").Append("姓名").Append(",").Append("事件");sw.WriteLine(sb);sw.Close();sw.Dispose();fs.Close();fs.Dispose();}using (StreamWriter sw2 = new StreamWriter(fileName, true,Encoding.Default)){StringBuilder sb = new StringBuilder();sb.Append(DateTime.Now.ToString("HH-mm-ss")).Append(",").Append(data).Append(",").Append(result+"\n");sw2.Write(sb.ToString());}}/// <summary>/// 读取CSV/// </summary>/// <returns></returns>public string ReadData(){string path = Directory.GetCurrentDirectory() + "\\data";if (!Directory.Exists(path)){Directory.CreateDirectory(path);}string fileName = $"{path}\\{DateTime.Now.ToString("yyyy-MM-dd")}.csv"; // 文件路径if (!File.Exists(fileName)){return "文件不存在";}StreamReader sr = new StreamReader(fileName,Encoding.Default);string s = sr.ReadToEnd(); // 读取数据sr.Close();sr.Dispose();return s;}
}

三、实现按钮事件

public partial class Form1 : Form
{public Form1(){InitializeComponent();}CSVAPI api = new CSVAPI();/// <summary>/// 写入/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button1_Click(object sender, EventArgs e){api.SaveData("吴亦凡","蹲完中国蹲加拿大");}/// <summary>/// 读取/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button2_Click(object sender, EventArgs e){string s = api.ReadData();MessageBox.Show(s);}
}

使用wpf office打开csv文件展示的效果


http://www.ppmy.cn/news/1576795.html

相关文章

Django数据库操作

1、ORM 创建、删除、修改数据库的表中的数据&#xff0c;但不能创建数据库往数据库表中写入数据 表名&#xff1a;app名称_类名的小写 2、操作表数据 from django.db import modelsclass Department(models.Model):title models.CharField(verbose_name"部门", …

C++:vector的push_back时间复杂度分析

引导示例 #include <iostream> #include <vector>int main() {std::vector<int> v;std::cout << v.capacity() << " ";int last 0;for (int i 1; i < 10; i) {v.push_back(1);std::cout << v.capacity() << " …

PX4中的uavcan进程

概述 PX4 中的 uavcan 模块梳理起来是有点杂的&#xff0c;就像 commander 中的内容一个较为杂乱。如果要梳理划分的话&#xff0c;可以按照主题消息的类型来划分&#xff0c;PX4 中的 uavcan 模块需要接收处理的消息主题非常多&#xff0c;因此将其主要分为三类&#xff1a; …

web安全渗透测试 APP安全渗透漏洞测试详情

前言 小小白承包了一块20亩的土地&#xff0c;依山傍水&#xff0c;风水不错。听朋友说去年玉米大卖&#xff0c;他也想尝尝甜头&#xff0c;也就种上了玉米。 看着玉米茁壮成长&#xff0c;别提小小白心里多开心&#xff0c;心里盘算着玉米大买后&#xff0c;吃香喝辣的富贵…

Scaling Laws(缩放法则)详解

Scaling Laws&#xff08;缩放法则&#xff09;详解 1. 定义与核心概念 Scaling Laws&#xff08;缩放法则&#xff09;描述的是模型性能&#xff08;如准确率、任务表现&#xff09;与计算资源&#xff08;模型参数量、训练数据量、训练时间&#xff09;之间的数学关系。其核…

PyCharm接入本地部署DeepSeek 实现AI编程!【支持windows与linux】

今天尝试在pycharm上接入了本地部署的deepseek&#xff0c;实现了AI编程&#xff0c;体验还是很棒的。下面详细叙述整个安装过程。 本次搭建的框架组合是 DeepSeek-r1:1.5b/7b Pycharm专业版或者社区版 Proxy AI&#xff08;CodeGPT&#xff09; 首先了解不同版本的deepsee…

Qt 文件操作+多线程+网络

文章目录 1. 文件操作1.1 API1.2 例子1&#xff0c;简单记事本1.3 例子2&#xff0c;输出文件的属性 2. Qt 多线程2.1 常用API2.2 例子1&#xff0c;自定义定时器 3. 线程安全3.1 互斥锁3.2 条件变量 4. 网络编程4.1 UDP Socket4.2 UDP Server4.3 UDP Client4.4 TCP Socket4.5 …

WDM_OTN_基础知识_波分系统基本构成-无源器件

在波分系统中通常将发光,对光进行放大以及产生光电转换的器件称之为有源器件&#xff0c;例如光放&#xff0c;激光器&#xff0c;与此相反&#xff0c;将那些不发光&#xff0c;不对光进行放大&#xff0c;也不产生光电转换的器件称之为无源器件&#xff0c;波分系统中的无源器…