gpt4 book ai didi

C# 读取 CSV 文件

转载 作者:太空宇宙 更新时间:2023-11-03 18:28:24 25 4
gpt4 key购买 nike

我正在尝试使用以下代码从 csv 文件中读取 -

        List<Person> people = new List<Person>();
Person personToAdd = new Person();


TextFieldParser parser = new TextFieldParser(@"C:\Users\user\Documents\Book1.csv");
parser.TextFieldType = FieldType.Delimited;
parser.SetDelimiters(",");
while (!parser.EndOfData)
{
//Processing row
string[] fields = parser.ReadFields();
int counter = 0;

foreach (string field in fields)
{
personToAdd.username = fields[0];
personToAdd.firstName = fields[1];
personToAdd.lastName = fields[2];
personToAdd.email = fields[3];
personToAdd.password = fields[4];
personToAdd.role = fields[5];

people.Add(personToAdd);
}
}
parser.Close();

此代码确实从 CSV 文件中读取,但我的人员对象中的每个条目都包含 CSV 文件中列出的最后一个条目。我确信这是一个相当简单的更改,但我对此很陌生,无法弄清楚。

最佳答案

您应该将 Person 实例的创建和初始化移到 while 循环中,并移除 foreach 循环。在每个 while 循环中重新加载字段

...
while (!parser.EndOfData)
{
// Loading the fields of a Person
string[] fields = parser.ReadFields();

// Starting the process that creates a new Person
Person personToAdd = new Person();
personToAdd.username = fields[0];
personToAdd.firstName = fields[1];
personToAdd.lastName = fields[2];
personToAdd.email = fields[3];
personToAdd.password = fields[4];
personToAdd.role = fields[5];

// Adding the new person to the list
people.Add(personToAdd);

} ....

在您上面的示例中,实例的创建在循环之外。在循环内,您更改同一实例的属性并在每个循环中读取它。当您退出循环时,所有添加的项目都指向同一个实例,其值设置为从文件中读取的最后一行

相反,在循环内创建一个新实例可以保证添加到列表中的每个项目都是不同的,其属性中的数据也不同。

关于C# 读取 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28297373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com