我有一个有名称和数字的两列CSV。有些人的名字使用逗号,例如Joe Blow, CFA。这个逗号打破了CSV格式,因为它被解释为一个新列。

我已经读过了,最常见的处方似乎是替换字符,或替换分隔符,用一个新值(例如,这个|那个|the,其他)。

我真的希望保留逗号分隔符(我知道excel支持其他分隔符,但其他解释器可能不支持)。我还想在名字中保留逗号,因为Joe Blow| CFA看起来很傻。

是否有一种方法在CSV列中包含逗号而不破坏格式,例如通过转义它们?


当前回答

双引号对我没用,它对我有用。”如果你想放置双引号作为例子,你可以设置\"\"。

您可以构建公式,例如:

fprintf(strout, "\"=if(C3=1,\"\"\"\",B3)\"\n");

将写入csv:

=如果(C3 = 1”“B3)

其他回答

如果你想证明你所说的,你可以用引号。就像这样

$name = "Joe Blow, CFA.";
$arr[] = "\"".$name."\"";

现在,你可以在name变量中使用逗号。

除了其他答案中的要点:如果你在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)

正是这种微妙把我带到了这里。

首先,如果项目值有双引号字符("),则替换为2个双引号字符("")

item = item.ToString().Replace("""", """""")

最后,包装项值:

左:带有双引号字符(")

右:带有双引号(")和逗号(,)

csv += """" & item.ToString() & ""","

根据您的语言,可能有to_json方法可用。这将避免破坏csv的许多事情。

CSV文件实际上可以使用不同的分隔符进行格式化,逗号只是默认值。

您可以使用sep标志为CSV文件指定分隔符。

只需添加一行sep=;作为CSV文件中的第一行,也就是说,如果您希望分隔符为分号。您可以将其更改为任何其他字符。