如何处理CSV文件中的引号?

时间:2013-10-28 08:18:01

标签: c# csv

要阅读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查询?

3 个答案:

答案 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一起加入。