我有一个csv文件,其中有一个包含逗号的字段。例如,在“办公地点”列下,我的值为xyz,即建筑物。当我通过调试器检查值时,它仅显示“ \” xyz”。我尝试使用Replace(",","")
和Replace("\"","")
来转义逗号和反斜杠,但失败了,而且我得到了额外的{{1 }}中的结果标记为红色圆圈。
我在调试时附加了图像,以显示csv行的结构。问题出在红色圆圈区域。
我还尝试了以下功能:
\
请帮助您解决问题。谢谢
您看到的\字符不在实际字符串中,而只是在调试器视图中添加的转义字符。
单击放大镜以获取字符串的实际值。
希望有帮助。
, String.Replace
不会修改现有字符串,而是返回一个新字符串。因此,您在row
检查之外有相同的旧IsNullOrEmpty
字符串。
此外,您正在告诉您,您正在尝试转义逗号和引号,但是您正在从代码中删除它。
如果您要删除逗号和引号,您的代码可能看起来像
if (string.IsNullOrEmpty(row))
{
row = row.Replace(",","").Replace("\"","");
}
如果您要转义引号和逗号,您的代码可能看起来像
if (row != null && row.Contains(","))
{
row = "\"" + row.Replace("\"","\"\"") + "\"";
}
,
请尝试使用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个问题值得指出。
您的代码会正确处理多行字符串吗?您会在其中一列中处理"
的代码(因此是转义的"
)吗?
我建议使用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
这是Visual Studio显示的内容(我在这里使用VS Code)。
这是Console.WriteLine打印的内容。
1,The string in the 2nd row does not have a comma in it
即使您处理引号,替换逗号也不会摆脱字段定界符吗?