首页 > 解决方案 > CsvParser 错过了一些指定分隔符的地方

问题描述

我有一个 C# 代码,它假设解析数据并使用“@BELL”作为分隔符。(BELL 是 ASCII 码)

但是有些值的末尾有另一个“@”,因此它看起来像这样“0.0000000@SS-AA&-BB-C)@@021328@STRING_Price”。CsvParser 确实在第一个“@”处分裂,但错过了第二次出现(它有“@@”)并在第三次出现时分裂得很好。数据不能在源中修改,必须保持原样。

我们正在使用 CsvHelper v 15.0.0。

这是一个已知的 CsvParser 问题吗?(我试图在不添加额外解析/替换的情况下逃脱)。

这是我的代码(我已经简化它并使用本地文件进行测试,但实际上它转到 AzureBlobStorage):

private static readonly string delimiter = "@" + new string('\u0007', 1);
private static string filePath = "C:\\Downloads\\000_From_Blob";

private static IEnumerable<string[]> ParseCompressedClientFormattedStream(string filePath, string delimiter)
{
    using (var remoteStream = File.OpenText(filePath))
    {
        using (var csvReader = new CsvParser(remoteStream, new CsvConfiguration(CultureInfo.InvariantCulture) { Delimiter = delimiter.ToString(), BadDataFound = null }))
        {
                for (; ; )
                {
                    var line = csvReader.Read();
                    if (line != null) yield return line;
                    else break;
                }
         }
    }
}

这是源文件中的 2 行示例。第一行被正确解析。但是第二个没有在它有双“@”的地方分裂:

110@A778@10211@2@Joe@0.0000000@SS-AA&-BB-C)@@SS-AA&-BB-C)@021328@STRING_Price@$9.99@@False
111@A778@10211@2@Joe@0.0000000@SS-AA&-BB-C)@@@SS-AA&-BB-C)@@021328@STRING_Price@$9.99@@False

在此处输入图像描述

标签: c#csvparsingcsvhelper

解决方案


这似乎是 v15.0.0 的 CsvHelper 包中的一个错误。将其更新到最新版本 15.0.5 - 已解决该问题。


推荐阅读