问题描述
我有一个C#代码,用于解析数据,并使用“ @BELL”作为Delimeter。 (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
解决方法
这似乎是v15.0.0的CsvHelper软件包中的错误。 将其更新到最新版本15.0.5-已解决该问题。