📅  最后修改于: 2023-12-03 14:39:42.661000             🧑  作者: Mango
在C#中,CSV(逗号分隔值)是一种常见的文件格式,经常被用于存储和传输数据。CSV文件是一个纯文本文件,行和列都用逗号分隔,每一行表示一个记录,每一列表示一条数据。
在本文中,我们将介绍如何使用C#读取和写入CSV文件。
CSV文件通常由多行和多个逗号分隔的字段组成。第一行通常是标题行,说明每一列的含义。下面是一个例子:
Name,Age,Gender
John,25,Male
Jane,30,Female
我们可以使用C#内置的StreamReader
和CsvHelper
库来读取CSV文件。StreamReader
用于打开CSV文件,CsvHelper
用于解析CSV文件。
以下是读取CSV文件的示例代码:
using System.IO;
using CsvHelper;
public List<MyModel> ReadCsvFile(string filePath)
{
var records = new List<MyModel>();
using (var reader = new StreamReader(filePath))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
csv.Configuration.HeaderValidated = null;
csv.Configuration.MissingFieldFound = null;
records = csv.GetRecords<MyModel>().ToList();
}
return records;
}
CsvHelper
库提供了一个CsvReader
类,它可以轻松地解析CSV文件。该类使用以下代码将CSV文件解析为具有列标题和行数据的嵌套列表:
using (var reader = new StreamReader(filePath))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
csv.Configuration.HeaderValidated = null;
csv.Configuration.MissingFieldFound = null;
records = csv.GetRecords<MyModel>().ToList();
}
在上面的示例中,我们首先打开CSV文件,然后创建一个CsvReader
实例。我们在CsvReader
的构造函数中指定InvariantCulture
,以确保不同区域设置下的字段解析正确。
我们还需要禁用csv.Configuration.HeaderValidated
和csv.Configuration.MissingFieldFound
,以避免在CSV文件中找到不匹配的列标题或缺少列的情况下抛出异常。
最后,我们使用csv.GetRecords<MyModel>().ToList()
将CSV文件读入List<MyModel>
中。在这里,MyModel
是一个自定义类,对应CSV文件中的每一行数据。
同样,C#也提供了内置StreamWriter
类和CsvHelper
库,可以用于将数据写入CSV文件。
以下是将数据写入CSV文件的示例代码:
using System.IO;
using CsvHelper;
public void WriteCsvFile(string filePath, List<MyModel> records)
{
using (var writer = new StreamWriter(filePath))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.WriteRecords(records);
}
}
在上面的示例中,我们首先创建一个StreamWriter
实例,然后创建一个CsvWriter
实例。我们在CsvWriter
的构造函数中指定InvariantCulture
,以确保不同区域设置下的字段解析正确。
最后,我们使用csv.WriteRecords(records)
将List<MyModel>
写入CSV文件。
在本文中,我们介绍了如何使用C#读取和写入CSV文件。我们使用StreamReader
和CsvHelper
库读取CSV文件,使用StreamWriter
和CsvHelper
库写入CSV文件。使用这些技术,您可以轻松地处理CSV文件并从中提取数据。
参考:https://jasonwatmore.com/post/2021/06/07/c-read-write-csv-files-with-csvhelper