【发布时间】:2020-03-17 04:37:39
【问题描述】:
我有一个 csv 文件,其中有一个包含逗号的字段。例如,在办公室位置列下,我有一个值 xyz,建筑。当我通过调试器检查值时,它只显示“\”xyz”。我尝试使用Replace(",","") 和Replace("\"","") 转义逗号和反斜杠,但它失败了。另外我在结果中得到了额外的\用红色圆圈标记。
我在调试显示 csv 行的结构时附上了图像。问题出在红色圆圈区域。
我也试过以下功能:
public static string RemoveColumnDelimitersInsideValues(string input)
{
const char valueDelimiter = '"';
const char columnDelimiter = ',';
StringBuilder output = new StringBuilder();
bool isInsideValue = false;
for (var i = 0; i < input.Length; i++)
{
var currentChar = input[i];
if (currentChar == valueDelimiter)
{
isInsideValue = !isInsideValue;
output.Append(currentChar);
continue;
}
if (currentChar != columnDelimiter || !isInsideValue)
{
output.Append(currentChar);
}
}
return output.ToString();
}
请帮助解决问题。谢谢
【问题讨论】:
-
实际上,在我看来,它只是在调试器视图中存在这个反斜杠。您应该尝试将此字符串输出到文件以查看反斜杠是否真的在这里
-
最简单的方法是使用现成的 CSV 解析器,该解析器还将处理值内的
",并将其转义为""。 -
如果您的数据有逗号,那么您应该以逗号分隔值(csv)的不同格式保存。尝试使用制表符分隔值(tsv)。
标签: c# .net csv datatable delimiter