读取 CSV 文件的背景
CSV(Comma-Separated Values)文件是一种常见的文件格式,其以逗号作为字段之间的分隔符。许多应用程序和系统会使用 CSV 文件来保存数据并进行交换。
在 C# 中,我们可以使用一些现有的库来读取 CSV 文件,同时使用数组来保存读取的数据。本文将介绍如何使用 CsvHelper 库来读取 CSV 文件并将值存储到数组中。
使用 CsvHelper 库读取 CSV 文件的准备工作
在开始使用 CsvHelper 库之前,需要进行一些准备工作:
1. 引用 CsvHelper 库
首先,需要在项目中引用 CsvHelper 库。可以通过 NuGet 包管理器来安装该库。
Install-Package CsvHelper
或者在 Visual Studio 中通过“管理 NuGet 程序包”来进行安装。
2. 创建 CSV 文件
为了演示如何读取 CSV 文件,我们需要先创建一个 CSV 文件,使用逗号来分隔每个字段。可以使用 Excel 或其他电子表格软件来创建 CSV 文件。假设我们创建了一个名为“data.csv”的文件,其内容如下:
Name, Age, Gender
Tom, 25, Male
Lily, 28, Female
Bob, 30, Male
使用 CsvHelper 库读取 CSV 文件
1. 创建实体类
CsvHelper 库可以将 CSV 文件中的每一行数据转换成一个实体类的对象。因此,我们需要先创建一个实体类来映射 CSV 文件中的每一行数据。
以 data.csv 文件为例,我们可以创建以下实体类:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string Gender { get; set; }
}
实体类中的属性名称需要与 CSV 文件的列名相同,属性类型需要与 CSV 文件中的数据类型相匹配。在以上示例中,Name 和 Gender 是字符串类型,Age 是整数类型。
2. 读取 CSV 文件
在创建好实体类之后,我们可以使用 CsvHelper 库来读取 CSV 文件。下面是读取 data.csv 文件并将值存储到数组中的示例代码:
using CsvHelper;
using System.Collections.Generic;
using System.IO;
public class CsvReader
{
public List<Person> ReadCsvFile()
{
List<Person> people = new List<Person>();
using (var reader = new StreamReader("data.csv"))
using (var csv = new CsvReader(reader))
{
csv.Configuration.HeaderValidated = null;
csv.Configuration.MissingFieldFound = null;
var records = csv.GetRecords<Person>();
foreach (var record in records)
{
people.Add(record);
}
}
return people;
}
}
上述代码中,使用 StreamReader 打开 data.csv 文件并将其传入 CsvReader 对象中。CsvHelper 库会自动解析 CSV 文件并将每一行数据转换成 Person 类的对象。在读取时,需要使用 CsvReader 对象的 GetRecords<T>() 方法,其中 T 为实体类的类型。该方法返回一个 IEnumerable<T> 对象,我们可以使用 foreach 循环遍历这个对象以获取每个 Person 对象。
在上面的代码中,我们还设置了 CsvReader 对象的 HeaderValidated 和 MissingFieldFound 属性,用于处理 CSV 文件中的一些异常情况。如果不设置这两个属性,CsvHelper 库会抛出异常。
使用数组存储 CSV 文件中的值
读取 CSV 文件并将值存储到数组中是一个很常见的需求。我们可以将每个 Person 对象的属性值存储到一个二维数组中,然后可以使用索引来访问这些值。
下面是示例代码:
public class CsvToArray
{
public string[,] ReadCsvFile()
{
var people = new List<Person>();
var result = new string[4, 3];
using (var reader = new StreamReader("data.csv"))
using (var csv = new CsvReader(reader))
{
csv.Configuration.HeaderValidated = null;
csv.Configuration.MissingFieldFound = null;
var records = csv.GetRecords<Person>();
int i = 0;
foreach (var record in records)
{
people.Add(record);
result[i, 0] = record.Name;
result[i, 1] = record.Age.ToString();
result[i, 2] = record.Gender;
i++;
}
}
return result;
}
}
在上面的代码中,我们创建了一个 string 类型的二维数组 result,其维度分别为 4 和 3。我们先遍历 CsvReader 对象的 every line of records 子句,每次循环中将 Person 对象的值存储到该对象的数组中。i 的值表示当前遍历到的行数,用于指定数组的行下标。
总结
本文介绍了如何使用 CsvHelper 库在 C# 中读取 CSV 文件,并将每行的数据存储到实体类或数组中。使用 CsvHelper 库可以方便快捷地读取和处理 CSV 文件,同时可以避免一些复杂的数据转换操作。希望本文对大家有所帮助。