Is there a way to include commas in CSV columns without breaking the formatting?
我有一个两栏的csv,有一个名字和一个数字。有些人的名字使用逗号,例如
我已经读过了,最常见的方法似乎是用一个新值(如
我很想保留逗号分隔符(我知道Excel支持其他分隔符,但其他解释程序可能不支持)。我还想保留逗号的名称,因为
是否有一种方法可以在不破坏格式的情况下在csv列中包含逗号,例如通过转义它们?
将字段括在引号中,例如
1 | field1_value,field2_value,"field 3,value",field4, etc... |
参见维基百科。
更新时间:
使用
1 2 3 | --------------------------------------- | regular_value |,,,"| ,"", |""" |"| --------------------------------------- |
号
csv文件将包含:
1 | regular_value,",,,""",","""",","""""""","""" |
逗号用引号简单地封装,所以
逗号和引号需要封装和引用,所以
csv格式的问题是,没有一个规范,有几个可接受的方法,没有办法区分应该使用哪种方法(用于生成/解释)。我讨论了在另一篇文章中转义字符的所有方法(在这种情况下是换行,但基本前提相同)。基本上,归根结底就是为预期的用户使用一个csv生成/转义过程,并希望其他人不介意。
参考规范文件。
如果你想这么说,你可以用引号。像这样的东西
1 2 | $name ="Joe Blow, CFA."; $arr[] =""".$name."""; |
。
现在,您可以在名称变量中使用逗号。
您需要引用这些值。这是更详细的规格。
除了其他答案中的要点之外:如果在Excel中使用引号,需要注意的一点是空格的位置。如果您有这样的代码行:
1 | print '%s,"%s","%s","%s"' % (value_1, value_2, value_3, value_4) |
。
Excel将把初始引号视为文本引号,而不是使用它来转义逗号。您的代码需要更改为
1 | print '%s,"%s","%s","%s"' % (value_1, value_2, value_3, value_4) |
正是这种微妙的感觉把我带到了这里。
我也面临同样的问题,引用
您可以对值进行编码,例如在php base64_encode($str)/base64_decode($str)中。
在我看来,这比加倍报价等简单。
https://www.php.net/manual/en/function.base64-encode.php
编码的值永远不会包含逗号,所以csv中的每个逗号都是分隔符。
双引号对我不起作用,它对我也起作用。如果您想以双引号为例,可以设置
您可以构建公式,例如:
1 2 | fprintf(strout,""=if(C3=1,"""",B3)" "); |
。
将以csv格式写入:
=IF(C3=1,"",B3)
号
根据您的语言,可能有一个to-json方法可用。这将逃避许多破坏CSV的事情。
首先,如果项值具有双引号字符(""),则替换为2个双引号字符(")
1 | item = item.ToString().Replace("""","""""") |
。
最后,包装项目值:
在左侧:带双引号字符(")
在右侧:带双引号字符(")和逗号字符(,)
1 | csv +="""" & item.ToString() &"""," |
您可以将平面文件连接管理器中的