有没有办法在CSV列中包含逗号而不破坏格式?

有没有办法在CSV列中包含逗号而不破坏格式?,csv,Csv,我有一个两列的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列中包含逗号而不破坏格式,例如通过转义它们?

您需要引用该值。

是更详细的规范。

您需要引用该值。

是更详细的规范。

用引号括起字段,例如

field1_value,field2_value,"field 3,value",field4, etc...

已更新

要对引号进行编码,请使用
,字段中的一个双引号符号将被编码为
,整个字段将成为
。因此,如果您在Excel中看到以下内容:

---------------------------------------
| regular_value |,,,"|  ,"", |"""   |"|
---------------------------------------
CSV文件将包含:

regular_value,",,,""",","""",","""""""",""""
逗号只是用引号封装的,所以
变成
,“


逗号和引号需要封装和引用,因此,
,“
变为
”,“
将字段括在引号中,例如

field1_value,field2_value,"field 3,value",field4, etc...

已更新

要对引号进行编码,请使用
,字段中的一个双引号符号将被编码为
,整个字段将变为
。因此,如果您在Excel中看到以下内容:

---------------------------------------
| regular_value |,,,"|  ,"", |"""   |"|
---------------------------------------
CSV文件将包含:

regular_value,",,,""",","""",","""""""",""""
逗号只是用引号封装的,所以
变成
,“


逗号和引号需要封装和引用,因此,
,“
变成了
,”

CSV格式的问题在于,没有一个规范,有几种可接受的方法,无法区分应该使用哪种方法(用于生成/解释)。我在中讨论了所有转义字符的方法(在这种情况下是换行符,但基本前提相同)。基本上,它可以归结为对目标用户使用CSV生成/转义过程,希望其他人不介意


.

CSV格式的问题在于,没有一个规范,有几种可接受的方法,无法区分应该使用哪种方法(用于生成/解释)。我在中讨论了所有转义字符的方法(在这种情况下是换行符,但基本前提相同)。基本上,它可以归结为对目标用户使用CSV生成/转义过程,希望其他人不介意


.

您可以使用平面文件连接管理器中的
文本限定符
字段作为
。这应该将数据用引号括起来,并且只能用引号外的逗号分隔。

您可以使用平面文件连接管理器中的
文本限定符
字段作为
。这应该将数据用引号括起来,并且只能用引号外的逗号分隔。

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

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

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

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

如果你想做到你所说的,你可以用引号。像这样的

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

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

如果您想实现您所说的,可以使用引号。像这样的

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

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

我也遇到了同样的问题,引用
没有帮助。最后,我将
替换为
+
,完成了处理,将输出保存到一个输出文件中,并将
+
替换为
。这可能看起来很难看,但对我来说很管用

我也遇到了同样的问题,引用
也无济于事。最后,我将
替换为
+
,完成了处理,将输出保存到一个输出文件中,并将
+
替换为
。这可能看起来很难看,但对我来说很管用

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

最后,包装项目值:

左侧:带双引号字符(“”)

右侧:带双引号字符(“)和逗号字符(,)


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

最后,包装项目值:

左侧:带双引号字符(“”)

右侧:带双引号字符(“)和逗号字符(,)


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

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

双引号不适用于我,它适用于我。
\“
。如果您想放置双引号作为示例,您可以设置
\“\”

您可以构建公式,例如:

fprintf(strout, "\"=if(C3=1,\"\"\"\",B3)\"\n");
将以csv格式写入:

=如果(C3=1,“,B3)


双引号对我不起作用,它对我起作用。如果您想放置双引号作为示例,可以设置
\“\”

你可以