要阅读CSV文件,请使用以下语句:
var query = from line in rawLines
let data = line.Split(';')
select new
{
col01 = data[0],
col02 = data[1],
col03 = data[2]
};
我想要阅读的CSV文件格式不正确,条目;
本身作为数据包含在qutation标记周围时,可能会出现错误。
示例:
col01;col02;col03
data01;"data02;";data03
上面的阅读声明在这里不起作用,因为它将第二行解释为四列。
问题:有没有一种简单的方法可以正确处理这种格式错误的CSV?也许还有另一个LINQ查询?
答案 0 :(得分:11)
只需使用CSV解析器和STOP ROLLING YOUR OWN:
using (var parser = new TextFieldParser("test.csv"))
{
parser.CommentTokens = new string[] { "#" };
parser.SetDelimiters(new string[] { ";" });
parser.HasFieldsEnclosedInQuotes = true;
// Skip over header line.
parser.ReadLine();
while (!parser.EndOfData)
{
string[] fields = parser.ReadFields();
Console.WriteLine("{0} {1} {2}", fields[0], fields[1], fields[2]);
}
}
TextFieldParser
内置于.NET中。只需添加对Microsoft.VisualBasic
程序集的引用,就可以了。一个真正的CSV解析器将很乐意处理这种情况。
答案 1 :(得分:1)
手动解析CSV文件始终会导致此类问题。我建议你使用像CsvHelper这样的第三方工具来处理解析。
此外,明确解析逗号并不是一个好主意,因为您的分隔符可以在您的计算机环境选项中被覆盖。
如果我能进一步提供帮助,请告诉我,
马特
答案 2 :(得分:0)
不是很优雅,但在使用您的方法后,您可以检查是否有任何colxx包含未完成的引号(单个),您可以将其与下一个colxx一起加入。