如何处理 CSV 文件中的引号

本文关键字:文件 CSV 何处理 处理 | 更新日期: 2023-09-27 18:37:16

要读取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

我上面的 read 语句在这里不起作用,因为它将第二行解释为四列。

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

如何处理 CSV 文件中的引号

只需使用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]);
    }
}

TextFieldParser内置于 .NET 中。只需添加对Microsoft.VisualBasic程序集的引用,您就可以开始了。一个真正的CSV解析器将很乐意处理这种情况。

手动解析 CSV 文件总是会导致这样的问题。我建议您使用第三方工具(如 CsvHelper)来处理解析。

此外,显式分析逗号不是一个好主意,因为可以在计算机环境选项中覆盖分隔符。

让我知道我是否可以进一步帮助,

马 特

不是很优雅,但在使用您的方法后,您可以检查任何 colxx 是否包含未完成的引号(单个),您可以将其与下一个 colxx 连接。