有没有办法在CSV列中包含逗号而不打破格式?
我有一个名称和一个数字两列CSV。 有些人的名字使用逗号,例如Joe Blow, CFA.
这个逗号打破了CSV格式,因为它被解释为一个新的列。
我已经读了,最常见的处方似乎是用一个新的值(例如this|that|the, other
)replace那个字符,或者用分隔符代替分隔符。
我真的想保留逗号分隔符(我知道Excel支持其他分隔符,但其他解释器可能不)。 我也想用这个名字来保留这个逗号,就像Joe Blow| CFA
Joe Blow| CFA
看起来非常愚蠢。
有没有办法在CSV列中包含逗号而不打破格式,例如通过转义格式?
CSV格式的问题是,没有一个规范,有几个接受的方法,没有办法区分哪些应该使用(生成/解释)。 我在另一篇文章中讨论了转义字符的所有方法(在这种情况下换行符,但基本前提相同)。 基本上,这归结于为预期用户使用CSV生成/转义stream程,希望其他人不介意。
参考规格文件 。
用引号括起来,例如
field1_value,field2_value,"field 3,value",field4, etc...
看维基百科 。
更新 :
为了编码一个引号,使用"
,一个字段中的单引号符号将被编码为""
,并且整个字段将变成""""
,所以如果你在例如Excel中看到以下内容:
--------------------------------------- | regular_value |,,,"| ,"", |""" |"| ---------------------------------------
CSV文件将包含:
regular_value,",,,""",","""",","""""""",""""
逗号简单地用引号封装,所以成为","
。
一个命令和报价需要封装和引用,所以","
变成""","""
。
你需要引用这个值。
这是一个更详细的规范。
如果你想让你说,你可以使用报价。 像这样的东西
$name = "Joe Blow, CFA."; $arr[] = "\"".$name."\"";
所以现在,你可以在你的名字variables中使用逗号。
除了其他答案中的要点:如果您在Excel中使用引号,则需要注意的一点是您的空间的位置。 如果你有这样一行代码:
print '%s, "%s", "%s", "%s"' % (value_1, value_2, value_3, value_4)
Excel会将最初的引号视为一个字面引号,而不是使用它来转义逗号。 您的代码将需要更改为
print '%s,"%s","%s","%s"' % (value_1, value_2, value_3, value_4)
正是这个微妙把我带到了这里。
我面对同样的问题,引用了,
没有帮助。 最后,我用+
replace了,
完成了处理,将输出保存到outfile中,并用+
replace了+
。 这可能看起来很丑,但它对我有用。
您可以使用Flat文件连接pipe理器中的Text_Qualifier
字段作为"
。这应该将您的数据用引号括起来,并且只能用引号之外的逗号分隔。
首先,如果项目值具有双引号字符(“),则replace为双引号字符(”“)
item = item.ToString().Replace("""", """""")
最后,包装项目值:
左边:用双引号字符(“)
右上:用双引号(“)和逗号(,)
csv += """" & item.ToString() & ""","
根据你的语言,可能有一个to_json方法可用。 这将会逃脱许多破坏CSV的事情。