我有两列的CSV,其中包含名称和数字。某些人的名字使用逗号,例如,Joe Blow, CFA.
该逗号打破了CSV格式,因为它被解释为新列。
我已经读过书,最常见的处方似乎是用一个新值(例如this|that|the, other
)替换该字符或分隔符。
我真的很想保留逗号分隔符(我知道excel支持其他定界符,但其他解释器可能不支持)。我还想保留逗号,因为Joe Blow| CFA
看起来很傻。
有没有一种方法可以在CSV列中包含逗号而不破坏格式,例如通过转义?
我有两列的CSV,其中包含名称和数字。某些人的名字使用逗号,例如,Joe Blow, CFA.
该逗号打破了CSV格式,因为它被解释为新列。
我已经读过书,最常见的处方似乎是用一个新值(例如this|that|the, other
)替换该字符或分隔符。
我真的很想保留逗号分隔符(我知道excel支持其他定界符,但其他解释器可能不支持)。我还想保留逗号,因为Joe Blow| CFA
看起来很傻。
有没有一种方法可以在CSV列中包含逗号而不破坏格式,例如通过转义?
Answers:
用引号将字段括起来,例如
field1_value,field2_value,"field 3,value",field4, etc...
参见维基百科。
更新时间:
要对报价进行编码,请使用"
,将字段中的一个双引号符号编码为""
,整个字段将变为""""
。因此,如果您在例如Excel中看到以下内容:
---------------------------------------
| regular_value |,,,"| ,"", |""" |"|
---------------------------------------
CSV文件将包含:
regular_value,",,,""",","""",","""""""",""""
逗号只是用引号引起来,所以,
变成","
。
逗号和引号需要封装和引号,因此","
成为""","""
。
","
),引号被转义了(例如"""
)
如果您想说的话,可以使用引号。像这样
$name = "Joe Blow, CFA.";
$arr[] = "\"".$name."\"";
因此,现在,您可以在名称变量中使用逗号。
$whatever = "\"".$name."\"";
我遇到了同样的问题,引用,
并没有帮助。最后,我取代了,
用+
,完成了加工,保存,输出到OUTFILE和替换+
用,
。这看起来很难看,但是对我有用。
+
根本不存在该数据。谢谢您的评论。
""
。这是正常的做法。
field = field.replace('"', '""')
第2步-在第1步之后,将字段本身括在双引号中,例如field = '"' + field + '"'
-那么我认为您是铁定的。
您可以对值进行编码,例如在PHP base64_encode($ str)/ base64_decode($ str)中
IMO这比加倍报价等简单。
https://www.php.net/manual/zh/function.base64-encode.php
编码值永远不会包含逗号,因此CSV中的每个逗号都是分隔符。
您可以Text_Qualifier
将平面文件连接管理器中的字段用作"
。这应将您的数据用引号引起来,并且只能用引号外的逗号分隔。