C# 将数据导出到数据库表时,从csv单元格中转义逗号(,)
我有一个csv文件,其中有一个字段中有逗号。e、 g在“办公室位置”列下,我有一个值xyz,building。当我通过调试器检查该值时,它只显示“\”xyz”。我尝试使用C# 将数据导出到数据库表时,从csv单元格中转义逗号(,),c#,.net,csv,datatable,delimiter,C#,.net,Csv,Datatable,Delimiter,我有一个csv文件,其中有一个字段中有逗号。e、 g在“办公室位置”列下,我有一个值xyz,building。当我通过调试器检查该值时,它只显示“\”xyz”。我尝试使用Replace(“,”)和Replace(“\”,”)对逗号和反斜杠进行转义,但失败了。另外,我在结果中得到了额外的\,标记为红色圆圈 我在调试显示csv行结构时附加了该图像。问题出在红色圆圈区域 我还尝试了以下功能: public static string RemoveColumnDelimitersInsideValue
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();
}
publicstaticstringremoveColumnDelimiterInsideValues(字符串输入)
{
常量char valueDelimiter='”;
常量字符列分隔符=',';
StringBuilder输出=新的StringBuilder();
bool-isInsideValue=false;
对于(变量i=0;i
请帮助解决这些问题。谢谢您看到的\字符不在实际字符串中,它只是在调试器视图中添加的转义字符 单击放大镜以获取字符串的实际值
希望对您有所帮助。
String.Replace
不会修改现有字符串,它会返回一个新字符串。因此,您在IsNullOrEmpty
检查之外有相同的行
字符串
另外,您正在告诉我们,您正在尝试转义逗号和引号,但您正在代码中删除它
如果要删除逗号和引号,代码可能如下所示
if(string.IsNullOrEmpty(行))
{
行=行。替换(“,”,“”)。替换(“\”,“”);
}
如果要转义引号和逗号,代码可能如下所示
if(行!=null&&row.Contains(“,”)
{
行=“\”+行。替换(“\”,“\”)+“\”;
}
尝试使用TextFieldParser,在csv中,如果列值带有逗号,则列值将用qoutes转义,因此将HasFieldsEnclosedInQuotes添加到true将自动将其读取为单列
using Microsoft.VisualBasic.FileIO;
using (TextFieldParser reader = new TextFieldParser(csvpath))
{
reader.Delimiters = new string[] { "," };
reader.HasFieldsEnclosedInQuotes = true;
string[] col = reader.ReadFields();
}
代码中有3个问题值得指出 1.解析CSV可能很棘手 是否正确地对多行字符串进行编码处理?是否对其中一列中的
“
进行编码处理(即转义的”
)
我建议使用csv阅读库(又名NuGet包)
没有反斜杠
这是一个文件
1,"The string in the first row has a comma, and an f, in it"
2,The string in the 2nd row does not have a comma in it
下面是VisualStudio显示的内容(我在这里使用VS代码)
这是Console.WriteLine打印的内容
1,"The string in the first row has a comma, and an f, in it"
2,The string in the 2nd row does not have a comma in it
3.替换逗号
即使你处理引号,替换逗号不就可以去掉字段分隔符吗?事实上,在我看来,这个反斜杠只是存在于调试器视图中。你应该尝试将这个字符串输出到一个文件中,看看反斜杠是否真的存在。简单的方法是使用一个现成的CSV解析器,它也需要c是值中的
“
,在值中转义为”
。如果数据有逗号,则应以逗号分隔值(csv)的不同格式保存。尝试使用制表符分隔值(tsv)。