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

Joh*_*ood 2 c# csv

要读取CSV文件,请使用以下语句:

var query = from line in rawLines
    let data = line.Split(';')
    select new
    {
    col01 = data[0],
    col02 = data[1],
    col03 = data[2]
    };
Run Code Online (Sandbox Code Playgroud)

我想要读取的CSV文件格式不正确,;当用qutation标记包围时,条目可以将分隔符本身作为数据.

例:

col01;col02;col03
data01;"data02;";data03
Run Code Online (Sandbox Code Playgroud)

我上面的阅读声明在这里不起作用,因为它将第二行解释为四列.

问题:是否有一种简单的方法可以正确处理这种格式错误的CSV?也许还有另一个LINQ查询?

Dar*_*rov 11

只需使用CSV解析器并停止滚动您自己:

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]);
    }
}
Run Code Online (Sandbox Code Playgroud)

TextFieldParser是用.NET构建的.只需添加对Microsoft.VisualBasic程序集的引用即可.一个真正的CSV解析器将很乐意处理这种情况.

  • 好吧,我刚刚学到了一些新东西,它只有0830.非常成功. (5认同)