在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
在本初学者教程中,我们将了解如何 读取 CSV 文件 成 列表 使用 IronXL 库。在任何编程语言中,这都是最基本的知识之一,因为 CSV 文件是存储数据并将数据从一个系统或应用程序传输到另一个系统或应用程序的常用方法。我们将介绍从项目设置到有效解析 CSV 文件的所有内容。
1.在 Visual Studio 中创建一个 C# 控制台项目。
2.使用 NuGet 包管理器安装 C# CSV 库。
3.使用 WorkBook.LoadCSV
方法加载 CSV 文件。
4.从文件中读取数据值并填充列表。
5.在控制台上打印列表。
打开 Visual Studio:在计算机上启动 Visual Studio。
创建新项目:点击 "创建新项目"。这将打开一个窗口,您可以在其中选择项目类型。
选择项目类型:选择 "控制台应用程序 (.NET Core)"作为项目类型,以简化操作。
命名项目:命名您的项目 CSVFileReader.
选择位置:在设备上选择一个合适的位置来保存此项目。
打开 NuGet 包管理器:在 Visual Studio 中,转到 "工具 "菜单,然后选择 "NuGet 包管理器",再选择 "管理解决方案的 NuGet 包..."。
浏览 IronXL:单击 "浏览 "选项卡并搜索 "IronXL.Excel"。
安装 IronXL:在搜索结果中找到 IronXL 软件包,选择后点击 "安装"。确保您同意任何许可协议并查看更改。
现在,您的CSVFileReader项目已经安装了 IronXL 库,可以开始用 C# 阅读和处理 CSV 文件了。这一设置为我们在本教程后续章节中执行 CSV 阅读任务奠定了基础。
在项目设置和 IronXL 库安装完成后,让我们集中精力解析和处理 CSV 文件。我们将在 "Program.cs "文件中工作,该文件将在CSVFileReader项目中自动生成。
在读取任何数据之前,我们需要知道 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
IronXL 可以直接加载 CSV 文件。使用 WorkBook.LoadCSV
方法将 CSV 文件读入一个 WorkBook
对象。
var csv = WorkBook.LoadCSV(filename);
var csv = WorkBook.LoadCSV(filename);
Dim csv = WorkBook.LoadCSV(filename)
创建一个类来表示 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
在这一步中,我们将解析 CSV 文件并填充一个 `List
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
在这个解析过程中,我们首先初始化一个 List<Person>来存储解析后的数据,并使用布尔标志
isFirstRow来跳过 CSV 文件的标题行。foreach "循环遍历 CSV 文件的每一行。在第一次迭代中,我们会识别并跳过标题行,确保只处理数据行。然后,我们使用
row.IsEmpty` 检查每一行,确保它不是空行。这一步对于避免空行导致的解析错误至关重要。
对于每一行数据,我们将其转换为单元格数组 (row.ToArray()
) 然后用这些数据创建一个 Person
对象。正确分析和转换数据类型至关重要,例如将 "年龄 "字符串转换为整数。解析后的 Person
对象将被添加到我们的 people
列表中。这种方法可确保只处理和存储有效的数据行,从而有效处理数字列中的非数字字符串或意外空行等潜在问题。
将 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
下面是完整的 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
运行文件后,控制台将显示列表数据:
在处理 CSV 文件中的各种数据类型时,必须根据每列数据的特定类型调整解析逻辑。在 Person
类的示例中,虽然 Name
是字符串,可以使用 StringValue
直接赋值,但像 Age
这样的数字字段需要使用 Int32.Parse
或 Convert.ToInt32
将字符串转换为整数。这对于避免类型不匹配错误至关重要。
对于日期等更复杂的数据类型,可使用 DateTime.Parse
将日期的字符串表示转换为 DateTime
对象。了解 CSV 文件中使用的日期格式并确保其与代码中的预期格式一致非常重要。不一致的日期格式会导致解析错误或不正确的数据解释。
您刚刚学习了如何使用 C# 中的 IronXL 来读取、解析和显示 CSV 文件的数据。这种方法可用于不同类型的数据结构和文件格式。因此,这对于每一个选择 C# 作为主要语言的开发人员来说,都是一项非常有用的技能。
IronXL 提供了 免费试用 供用户体验其功能。试用期结束后,IronXL 将以 $749 的起始价格开始许可。
请记住,要编写更健壮的代码,就必须处理异常和边缘情况,尤其是在管理不同数据类型和使用大文件时。继续尝试和探索 IronXL 的更多功能,以提高用 C# 处理数据的能力。编码愉快!