我正在编写一个简单的导入应用程序,需要读取CSV文件,在中显示结果,DataGrid并在另一个网格中显示CSV文件的损坏行。例如,在另一个网格中显示短于5个值的线。我正在尝试这样做:
DataGrid
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]) }); }
但是在这种情况下,很难对数组进行操作。有没有更好的方法来分割值?
不要重新发明轮子。利用.NET BCL中已有的功能。
Microsoft.VisualBasic
Microsoft.VisualBasic.FileIO.TextFieldParser
这是示例代码:
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#项目中,它对我来说很棒。
以下是一些其他链接/信息: