c# - 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
解决方案
这似乎是 v15.0.0 的 CsvHelper 包中的一个错误。将其更新到最新版本 15.0.5 - 已解决该问题。
推荐阅读
- javascript - 执行多个 ajax 请求但响应始终相同
- python - 如何在 step 方法中为 TF-Agents 环境提供一组动作?
- kubernetes - 如何将本地 Kubernetes 集群中的单个文件挂载到 Pod 中
- opengl-es - OpenGL ES 2.0:如何自定义卷积核?
- numpy - pyspark中的除法函数
- c - 循环条件中使用的变量“y”和“x”未在循环主体中修改-帮助,以前的答案没有帮助
- javascript - vuetify 尝试使用 v-for 显示对象的值
- google-chrome - Pupette Aria 选择器框架支持
- python - 相同路径中包含的信息
- r - 如何在 ggraph / ggplot2 中按顺序设置辅助 x 轴?