一尘不染

使用C#读取CSV文件

c#

我正在编写一个简单的导入应用程序,需要读取CSV文件,在中显示结果,DataGrid并在另一个网格中显示CSV文件的损坏行。例如,在另一个网格中显示短于5个值的线。我正在尝试这样做:

StreamReader sr = new StreamReader(FilePath);
importingData = new Account();
string line;
string[] row = new string [5];
while ((line = sr.ReadLine()) != null)
{
    row = line.Split(',');

    importingData.Add(new Transaction
    {
        Date = DateTime.Parse(row[0]),
        Reference = row[1],
        Description = row[2],
        Amount = decimal.Parse(row[3]),
        Category = (Category)Enum.Parse(typeof(Category), row[4])
    });
}

但是在这种情况下,很难对数组进行操作。有没有更好的方法来分割值?


阅读 229

收藏
2020-05-19

共1个答案

一尘不染

不要重新发明轮子。利用.NET BCL中已有的功能。

  • 添加对的引用Microsoft.VisualBasic(是的,它说是VisualBasic,但它也可以在C#中工作-请记住,最后都只是IL)
  • 使用Microsoft.VisualBasic.FileIO.TextFieldParser该类来解析CSV文件

这是示例代码:

using (TextFieldParser parser = new TextFieldParser(@"c:\temp\test.csv"))
{
    parser.TextFieldType = FieldType.Delimited;
    parser.SetDelimiters(",");
    while (!parser.EndOfData) 
    {
        //Processing row
        string[] fields = parser.ReadFields();
        foreach (string field in fields) 
        {
            //TODO: Process field
        }
    }
}

在我的C#项目中,它对我来说很棒。

以下是一些其他链接/信息:

2020-05-19