当前位置: 首页 > news >正文

C# 读取 CSV 文件的方法汇总

文章目录

  • 1. 使用System.IO命名空间中的类
  • 2. 处理标题行和指定列
  • 3. 使用CsvHelper库
  • 4. 高级功能和异常处理
  • 5. 使用 LINQ
  • 6. 总结

在这里插入图片描述


CSV(Comma-Separated Values,逗号分隔值)文件是一种简单的文本文件格式,用于存储表格数据。在C#中,有多种方法可以用于读取CSV文件。本文将介绍几种常见的读取CSV文件的方法,包括使用System.IO命名空间中的类、使用CsvHelper库以及使用LINQ。

1. 使用System.IO命名空间中的类

System.IO命名空间提供了基本的文件读取功能。以下是一个使用StreamReader读取CSV文件的基本示例:

using System;
using System.IO;class Program
{static void Main(){string filePath = "example.csv";string line;Encoding encoding = Encoding.UTF8; // 设置文件编码方式// 使用 StreamReader 读取 CSV 文件using (StreamReader reader = new StreamReader(filePath, encoding)){while ((line = reader.ReadLine()) != null){Console.WriteLine(line);}}}
}

在这个示例中,我们使用StreamReader类读取CSV文件,并设置了文件的编码方式为UTF-8。你可以根据实际需求更改编码方式,如GBK等。

2. 处理标题行和指定列

CSV文件通常包含标题行,以下是一个读取标题行和指定列的示例:

using System;
using System.IO;class Program
{static void Main(){string filePath = "example.csv";string line;Encoding encoding = Encoding.UTF8; // 设置文件编码方式// 使用 StreamReader 读取 CSV 文件using (StreamReader reader = new StreamReader(filePath, encoding)){// 读取标题行var header = reader.ReadLine();var headers = header.Split(',');// 读取指定列while ((line = reader.ReadLine()) != null){var fields = line.Split(',');Console.WriteLine($"{headers[0]}: {fields[0]}, {headers[1]}: {fields[1]}");}}}
}

在这个示例中,我们首先读取标题行,然后使用标题行中的列名输出指定列的数据。

3. 使用CsvHelper库

CsvHelper是一个流行的第三方库,用于处理CSV文件。首先,你需要在项目中安装CsvHelper包,可以通过NuGet包管理器进行安装:

Install-Package CsvHelper

然后,使用CsvHelper的CsvReader类读取CSV文件:

using CsvHelper;
using CsvHelper.Configuration;
using System;class Program
{static void Main(){string filePath = "example.csv";var config = new CsvConfiguration { HasHeaderRecord = true };// 使用 CsvReader 读取 CSV 文件using (var reader = new CsvReader(File.OpenRead(filePath), config)){var records = reader.GetRecords<dynamic>();foreach (var record in records){Console.WriteLine($"{record.Field1}, {record.Field2}, {record.Field3}");}}}
}

在这个示例中,我们使用CsvReader类读取CSV文件,并使用GetRecords()方法将记录转换为动态对象。

4. 高级功能和异常处理

在使用CsvHelper库时,你可以采取一些高级功能,如数据验证或异常处理。以下是一个示例:

using CsvHelper;
using CsvHelper.Configuration;
using System;class Program
{static void Main(){string filePath = "example.csv";var config = new CsvConfiguration { HasHeaderRecord = true };// 使用 CsvReader 读取 CSV 文件using (var reader = new CsvReader(File.OpenRead(filePath), config)){reader.Read();// 验证标题行if (reader.HeaderRecord.Any(header => header == "InvalidField")){throw new InvalidDataException("CSV文件包含无效字段。");}var records = reader.GetRecords<dynamic>();foreach (var record in records){// 验证记录if (record.Field1 == "InvalidValue"){throw new InvalidDataException("CSV文件包含无效值。");}Console.WriteLine($"{record.Field1}, {record.Field2}, {record.Field3}");}}}
}

在这个示例中,我们首先读取标题行,然后验证标题行和记录中的字段是否包含无效数据。如果包含无效数据,我们将抛出异常。

5. 使用 LINQ

LINQ(Language Integrated Query)提供了一种简洁的方式来进行数据查询。以下是一个使用 LINQ 读取 CSV 文件的示例:

using System;
using System.Linq;
using System.IO;class Program
{static void Main(){string filePath = "example.csv";string[] lines = File.ReadAllLines(filePath);foreach (var line in lines){string[] fields = line.Split(',');Console.WriteLine($"{fields[0]}, {fields[1]}, {fields[2]}");}}
}

在这个示例中,我们使用 File.ReadAllLines() 方法读取 CSV 文件的所有行,然后使用 Split() 方法分割每一行的字段,并输出到控制台。

6. 总结

在C#中,有多种方法可以用于读取CSV文件,包括使用System.IO命名空间中的类、使用CsvHelper库以及使用LINQ。你可以根据具体的需求和场景选择最适合的方法。希望本文能够帮助你更好地理解和使用这些方法。

在实际应用中,读取CSV文件时需要注意以下几点:

  1. 确保文件的编码方式与代码中的编码方式一致,否则可能导致乱码。
  2. 如果CSV文件中的数据包含特殊字符(如逗号、引号等),可能需要进行转义处理。
  3. 使用第三方库(如CsvHelper)时,确保已经安装了相应的包,并正确引用了相关的命名空间。
  4. 在处理CSV文件时,考虑数据的验证和异常处理,以确保程序的稳定性和数据的准确性。
http://www.lryc.cn/news/356003.html

相关文章:

  • element+ 引入图标报错 Failed to resolve import “@element-plus/icons-vue“ from “
  • Github 2024-05-25 开源项目日报 Top10
  • VPN的详细理解
  • java后端轮播图的设计
  • upload-labs 21关解析
  • 常用汇编指令
  • LabVIEW软件需求分析文档内容和编写指南
  • spring cache(三)demo
  • Android 应用开发语言选择对比
  • Git 小白入门到进阶—(基本概念和常用命令)
  • 大数据框架总结(全)
  • 44、Flink 的 Interval Join 详解
  • H6246 60V降压3.3V稳压芯片 60V降压5V稳压芯片IC 60V降压12V稳压芯片
  • 【MySQL精通之路】查询优化器的使用(8)
  • Docker in Docker(DinD)原理与实践
  • 科技前沿:IDEA插件Translation v3.6 带来革命性更新,翻译和发音更智能!
  • 【并发小知识】
  • python将多个音频文件与一张图片合成视频
  • JavaEE:Servlet创建和使用及生命周期介绍
  • 【Python设计模式15】适配器模式
  • 【Python设计模式05】装饰模式
  • kafka 消费模式基础架构
  • nginx安装部署问题
  • 揭开Java序列化的神秘面纱(上)Serializable使用详解
  • 深度学习——自己的训练集——图像分类(CNN)
  • goimghdr,一个有趣的 Python 库!
  • 每小时电量的计算sql
  • 自动化您的任务——crewAI 初学者教程
  • K8s集群中的Pod调度约束亲和性与反亲和性
  • kafka之consumer参数auto.offset.reset