我有一个有名称和数字的两列CSV。有些人的名字使用逗号,例如Joe Blow, CFA。这个逗号打破了CSV格式,因为它被解释为一个新列。
我已经读过了,最常见的处方似乎是替换字符,或替换分隔符,用一个新值(例如,这个|那个|the,其他)。
我真的希望保留逗号分隔符(我知道excel支持其他分隔符,但其他解释器可能不支持)。我还想在名字中保留逗号,因为Joe Blow| CFA看起来很傻。
是否有一种方法在CSV列中包含逗号而不破坏格式,例如通过转义它们?
我有一个有名称和数字的两列CSV。有些人的名字使用逗号,例如Joe Blow, CFA。这个逗号打破了CSV格式,因为它被解释为一个新列。
我已经读过了,最常见的处方似乎是替换字符,或替换分隔符,用一个新值(例如,这个|那个|the,其他)。
我真的希望保留逗号分隔符(我知道excel支持其他分隔符,但其他解释器可能不支持)。我还想在名字中保留逗号,因为Joe Blow| CFA看起来很傻。
是否有一种方法在CSV列中包含逗号而不破坏格式,例如通过转义它们?
当前回答
要对包含逗号(,)或双引号(")字符的字段进行编码,请将字段用双引号括起来:
field1,"field, 2",field3, ...
文字双引号字符通常由一对双引号("")表示。例如,只包含一个双引号字符的字段被编码为""""。
例如:
Sheet: |Hello, World!|You "matter" to us.|
CSV: "Hello, World!","You ""matter"" to us."
更多示例(sheet→csv):
正则值→正则值 新鲜,棕色“鸡蛋”→“新鲜,棕色”“鸡蛋”“” →"""" ","→""",""" " …"→"…""" ,"",→",""""," """→""""""""
看到维基百科。
其他回答
我面对同样的问题,引用,没有帮助。最终,我将,替换为+,完成了处理,将输出保存到outfile中,并将+替换为,。这可能看起来很丑,但对我来说很管用。
在列文本中转义分隔符和引号的c#方法。这应该是您所需要的,以确保您的csv没有被破坏。
private string EscapeDelimiter(string field)
{
if (field.Contains(yourEscapeCharacter))
{
field = field.Replace("\"", "\"\"");
field = $"\"{field}\"";
}
return field;
}
你需要引用这些值。 这是一个更详细的规范。
你可以对你的值进行编码,例如在PHP中base64_encode($str) / base64_decode($str)
在我看来,这比双引号等更简单。
https://www.php.net/manual/en/function.base64-encode.php
编码的值永远不会包含逗号,因此CSV中的每个逗号都将是分隔符。
双引号对我没用,它对我有用。”如果你想放置双引号作为例子,你可以设置\"\"。
您可以构建公式,例如:
fprintf(strout, "\"=if(C3=1,\"\"\"\",B3)\"\n");
将写入csv:
=如果(C3 = 1”“B3)