我的代码不会将CSV文件读入我的对象列表

时间:2019-01-23 03:48:35

标签: c#

我的CSV文件未正确读取,或者我将对象错误地添加到列表中,但是我没有在列表中添加任何值。

我尝试使用不同的路径访问CSV文件,并且尝试使用不同的方式读取CSV文件,但是没有任何效果。

void TheDex()
{
    List<Class1> Pokedex = new List<Class1>();

    TextFieldParser parser = new TextFieldParser("pokemon.csv");
    parser.TextFieldType = FieldType.Delimited;
    parser.SetDelimiters(",");

    while (!parser.EndOfData)
    {
        string row = parser.ReadLine();
        String[] Columns = row.Split(Convert.ToChar(","));
        Class1 Dex = new Class1();

        Dex.DexNumber = Columns[0];
        Dex.Name = Columns[1];
        Dex.Type1 = Columns[2];
        Dex.Type2 = Columns[3];
        Dex.Total = Columns[4];
        Dex.HP = Columns[5];
        Dex.ATK = Columns[6];
        Dex.DEf = Columns[7];
        Dex.SpAtk = Columns[8];
        Dex.SpDef = Columns[9];
        Dex.Spd = Columns[10];
        Dex.Generation = Columns[11];
        Dex.Legendary = Columns[12];
        Pokedex.Add(Dex);
    }

    parser.Close();
}

我希望列表Pokedex包含保存来自CSV数据的对象,但到目前为止Pokedex列表仍然为空。

1 个答案:

答案 0 :(得分:1)

您错误地使用了TextFieldParser类。 初始化parser后,可以使用ReadFields方法获取所有字段。它将使用您指定的定界符进行此操作:

List<Class1> Pokedex = new List<Class1>();

string[] delimiters = { "," };
using (TextFieldParser parser = FileSystem.OpenTextFieldParser("Names.txt", delimiters))
{
    while (!parser.EndOfData)
    {
        string[] fields = parser.ReadFields();

        // populate your class here
        Class1 Dex = new Class1();

        Dex.DexNumber = fields[0];
        Dex.Name = fields[1];

        // add the other fields here


       Pokedex.Add(Dex);
    }
}

在互联网上有许多使用TextFieldParser的正确方法的示例。我发现this one显示了上面的示例。

Andy通过将TextFieldParser包裹在using子句中,您无需在完成后就关闭解析器,因为using语句将为您处理。