使用IRONXL

如何在C#中将CSV文件转换为列表

发布 2024年一月27日
分享:

在本初学者教程中,我们将了解如何读取 CSV 文件列表使用IronXL图书馆 由于 CSV 文件是存储数据并将数据从一个系统或应用程序传输到另一个系统或应用程序的常用方法,因此这是任何编程语言都需要了解的最基本的知识之一。 我们将涵盖从项目设置到有效解析 CSV 文件的所有内容。

如何在 C# 中将 CSV 文件转换为列表;

  1. 在 Visual Studio 中创建 C# 控制台项目。

  2. 使用 NuGet 包管理器安装 C# CSV 库。

  3. 使用 WorkBook.LoadCSV 方法加载 CSV 文件。

  4. 从文件中读取数据值并填充列表。

  5. 在控制台上打印列表。

设置项目

步骤 1:创建一个新的 C# 项目

  1. 打开 Visual Studio:在计算机上启动 Visual Studio。

  2. 创建新项目:单击 "创建新项目"。 这将打开一个窗口,您可以在此选择项目类型。

  3. 选择项目类型:选择 "控制台应用程序(.NET Core)为简化起见,请将".NET "作为您的项目类型。

  4. 命名您的项目:命名您的项目 CSVFileReader.

  5. 选择位置:在您的设备上选择一个合适的位置来保存此项目。

  6. 生成项目:点击 "创建 "初始化新的 C# 项目。

第 2 步:安装 IronXL 库

  1. 打开 NuGet 包管理器:在 Visual Studio 中,进入 "工具 "菜单,然后选择 "NuGet 包管理器",再选择 "管理解决方案的 NuGet 包..."。

  2. 浏览 IronXL:单击 "浏览 "选项卡,搜索 "IronXL.Excel"。

    如何用 C# 将 CSV 文件转换为列表:图 1 - IronXL

  3. 安装 IronXL:在搜索结果中找到 IronXL 软件包,选择后点击 "安装"。确保您同意任何许可协议并查看更改。

  4. 检查安装:安装完成后,您应该可以在项目的参考资料中看到 IronXL。

    现在,您的CSVFileReader项目已使用 IronXL 库设置完毕,您可以开始使用 C# 阅读和处理 CSV 文件了。 这种设置为我们在本教程后续章节中执行 CSV 阅读任务奠定了基础。

在 C# 中解析和处理 CSV 文件;

在项目设置和 IronXL 库安装完成后,让我们来关注 CSV 文件的解析和处理。 我们将在 "Program.cs "文件中工作,该文件在CSVFileReader项目中自动生成。

步骤 1:指定文件路径

在读取任何数据之前,我们需要知道 CSV 文件的位置。 在 Main 方法中定义一个变量来存储文件路径。

string filename = "csvfile.csv"; // Replace with your actual file path
string filename = "csvfile.csv"; // Replace with your actual file path
Dim filename As String = "csvfile.csv" ' Replace with your actual file path
VB   C#

第 2 步:加载 CSV 文件

IronXL 可以直接加载 CSV 文件。使用 WorkBook.LoadCSV 方法将 CSV 文件读入一个 WorkBook 对象。

var csv = WorkBook.LoadCSV(filename);
var csv = WorkBook.LoadCSV(filename);
Dim csv = WorkBook.LoadCSV(filename)
VB   C#

步骤 3:定义数据结构

创建一个类来表示 CSV 文件中的数据结构。例如,如果您的 CSV 包含关于人的信息,可以像这样定义一个 Person 类:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}
Public Class Person
	Public Property Name() As String
	Public Property Age() As Integer
End Class
VB   C#

步骤 4:解析 CSV 数据

在这一步中,我们将解析 CSV 文件并填充一个 `List使用数据。 我们正在使用 IronXL 处理 CSV 读取,关键是正确处理 CSV 的每一行或每一个变量行,同时考虑到页眉和任何潜在的空行。 以下是代码的详细分类:

List<Person> people = new List<Person>();
bool isFirstRow = true; // Add a flag to check for the first row
foreach (var row in csv.WorkSheets [0].Rows)
{
    if (isFirstRow)
    {
        isFirstRow = false; // Set the flag to false after skipping the first row
        continue;
    }
    if (row.IsEmpty) continue; // Skip empty rows
    var cells = row.ToArray();
    var person = new Person()
    {
        Name = cells [0].StringValue,
        Age = int.Parse(cells [1].StringValue) // Ensure this is a numeric value
    };
    people.Add(person);
}
List<Person> people = new List<Person>();
bool isFirstRow = true; // Add a flag to check for the first row
foreach (var row in csv.WorkSheets [0].Rows)
{
    if (isFirstRow)
    {
        isFirstRow = false; // Set the flag to false after skipping the first row
        continue;
    }
    if (row.IsEmpty) continue; // Skip empty rows
    var cells = row.ToArray();
    var person = new Person()
    {
        Name = cells [0].StringValue,
        Age = int.Parse(cells [1].StringValue) // Ensure this is a numeric value
    };
    people.Add(person);
}
Dim people As New List(Of Person)()
Dim isFirstRow As Boolean = True ' Add a flag to check for the first row
For Each row In csv.WorkSheets (0).Rows
	If isFirstRow Then
		isFirstRow = False ' Set the flag to false after skipping the first row
		Continue For
	End If
	If row.IsEmpty Then
		Continue For ' Skip empty rows
	End If
	Dim cells = row.ToArray()
	Dim person As New Person() With {
		.Name = cells (0).StringValue,
		.Age = Integer.Parse(cells (1).StringValue)
	}
	people.Add(person)
Next row
VB   C#

在这个解析过程中,我们首先初始化一个 List<Person>您可以使用 "isFirstRow "来存储解析后的数据,并使用布尔标志 "isFirstRow "来跳过 CSV 文件的头行。 foreach "循环遍历 CSV 文件的每一行。在第一次迭代中,会识别并跳过标题行,确保只处理数据行。 然后,我们使用row.IsEmpty` 检查每一行,确保其不为空。 这一步骤对于避免出现空行解析错误至关重要。

对于每一行数据,我们将其转换成一个单元格数组(row.ToArray())然后用这些数据创建一个 Person 对象。 正确分析和转换数据类型至关重要,例如将 "年龄 "字符串转换为整数。 解析后的 Person 对象将被添加到我们的 people 列表中。这种方法可确保只处理和存储有效的数据行,从而有效处理数字列中的非数字字符串或意外空行等潜在问题。

步骤 5:显示数据

将 CSV 数据解析到我们的 `List下一个重要步骤是显示和验证数据。 这不仅有助于确保我们的解析工作取得成功,还能让我们观察输出结果并进行快速的数据质量检查。 以下是如何实现这一点的方法:

foreach (var person in people)
{
    Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
foreach (var person in people)
{
    Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
For Each person In people
	Console.WriteLine($"Name: {person.Name}, Age: {person.Age}")
Next person
VB   C#

下面是完整的 Program.cs 代码:

using IronXL;

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main(string [] args)
    {
        string filename = @"C:\Users\tayya\Downloads\sample_data.csv"; // Replace with your actual file path
        var csv = WorkBook.LoadCSV(filename);
        List<Person> people = new List<Person>();
        bool isFirstRow = true; // Add a flag to check for the first row
        foreach (var row in csv.WorkSheets [0].Rows)
        {
            if (isFirstRow)
            {
                isFirstRow = false; // Set the flag to false after skipping the first row
                continue;
            }
            if (row.IsEmpty) continue; // Skip empty rows
            var cells = row.ToArray();
            var person = new Person()
            {
                Name = cells [0].StringValue,
                Age = int.Parse(cells [1].StringValue) // Ensure this is a numeric value
            };
            people.Add(person);
        }
        foreach (var person in people)
        {
            Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
        }
    }
}
using IronXL;

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main(string [] args)
    {
        string filename = @"C:\Users\tayya\Downloads\sample_data.csv"; // Replace with your actual file path
        var csv = WorkBook.LoadCSV(filename);
        List<Person> people = new List<Person>();
        bool isFirstRow = true; // Add a flag to check for the first row
        foreach (var row in csv.WorkSheets [0].Rows)
        {
            if (isFirstRow)
            {
                isFirstRow = false; // Set the flag to false after skipping the first row
                continue;
            }
            if (row.IsEmpty) continue; // Skip empty rows
            var cells = row.ToArray();
            var person = new Person()
            {
                Name = cells [0].StringValue,
                Age = int.Parse(cells [1].StringValue) // Ensure this is a numeric value
            };
            people.Add(person);
        }
        foreach (var person in people)
        {
            Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
        }
    }
}
Imports IronXL

Public Class Person
	Public Property Name() As String
	Public Property Age() As Integer
End Class

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim filename As String = "C:\Users\tayya\Downloads\sample_data.csv" ' Replace with your actual file path
		Dim csv = WorkBook.LoadCSV(filename)
		Dim people As New List(Of Person)()
		Dim isFirstRow As Boolean = True ' Add a flag to check for the first row
		For Each row In csv.WorkSheets (0).Rows
			If isFirstRow Then
				isFirstRow = False ' Set the flag to false after skipping the first row
				Continue For
			End If
			If row.IsEmpty Then
				Continue For ' Skip empty rows
			End If
			Dim cells = row.ToArray()
			Dim person As New Person() With {
				.Name = cells (0).StringValue,
				.Age = Integer.Parse(cells (1).StringValue)
			}
			people.Add(person)
		Next row
		For Each person In people
			Console.WriteLine($"Name: {person.Name}, Age: {person.Age}")
		Next person
	End Sub
End Class
VB   C#

代码输出

运行文件时,控制台将显示列表数据:

如何用 C# 将 CSV 文件转换为列表:图 2 - 列表输出

处理不同的数据类型

在处理 CSV 文件中的各种数据类型时,必须根据每列数据的特定类型调整解析逻辑。 在 Person 类的示例中,虽然 Name 是字符串,可以使用 StringValue 直接赋值,但像 Age 这样的数字字段需要使用 Int32.ParseConvert.ToInt32 将字符串转换为整数。 这对于避免类型错配错误至关重要。

对于日期等更复杂的数据类型,可使用 DateTime.Parse 将日期的字符串表示转换为 DateTime 对象。 重要的是要注意 CSV 文件中使用的日期格式,并确保其与代码中的预期格式一致。 不一致的日期格式会导致解析错误或不正确的数据解释。

结论

您刚刚学习了如何使用 C# 中的 IronXL 读取、解析和显示 CSV 文件的数据。 这种方法可用于不同类型的数据结构和文件格式。 因此,对于将 C# 作为主要语言的每一位开发人员来说,这都是一项非常有用的技能。

IronXL 提供了一个免费试用让用户体验其功能。 试用期结束后,IronXL 即开始授权,起价为 $749。

请记住,要编写更强大的代码,必须处理异常和边缘情况,尤其是在管理不同数据类型和使用大型文件时。 不断尝试和探索 IronXL 的更多功能,以增强在 C# 中处理数据的能力。 快乐编程!

< 前一页
如何在C#中将CSV导入到Datatable
下一步 >
如何在 VB .NET 中保存 Excel 文件

准备开始了吗? 版本: 2024.11 刚刚发布

免费NuGet下载 总下载量: 1,111,773 查看许可证 >