首页 文章

有没有办法在不破坏格式的情况下在CSV列中包含逗号?

提问于
浏览
143

我've got a two column CSV with a name and a number. Some people'的名称使用逗号,例如 Joe Blow, CFA. 此逗号分隔CSV格式,因为它被解释为新列 .

我已经阅读过,最常见的处方似乎是用新值替换该字符或替换分隔符(例如 this|that|the, other ) .

我也喜欢在名字中保留逗号,因为 Joe Blow| CFA 看起来很傻 .

有没有办法在不破坏格式的情况下在CSV列中包含逗号,例如通过转义它们?

10 回答

  • 33

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

    Reference spec document .

  • 160

    将该字段括在引号中,例如

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

    wikipedia .

    Updated

    要对报价进行编码,请使用 " ,字段中的单引号将编码为 "" ,整个字段将变为 """" . 因此,如果你看到以下内容: Excel中:

    ---------------------------------------
    | regular_value |,,,"|  ,"", |"""   |"|
    ---------------------------------------
    

    CSV文件将包含:

    regular_value,",,,""",","""",","""""""",""""
    

    逗号简单地使用引号封装,因此 , 变为 "," .

    需要封装和引用逗号和引号,因此 "," 变为 """,""" .

  • 6

    如果你想说,你可以使用引号 . 像这样的东西

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

    现在,您可以在名称变量中使用逗号 .

  • 2

    你需要引用这些值 .
    Here是一个更详细的规范 .

  • 0

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

    正是这种微妙之处将我带到了这里 .

  • 0

    我遇到了同样的问题并引用 , 没有帮助 . 最后,我用 + 替换 , ,完成处理,将输出保存到outfile中,并用 , 替换 + . 这可能看起来很丑,但它对我有用 .

  • 7

    您可以将Flat文件连接管理器中的 Text_Qualifier 字段用作 " . 这应该将您的数据包装在引号中,并且只能用引号之外的逗号分隔 .

  • 0

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

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

    最后,换行项值:

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

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

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

    根据您的语言,可能有to_json方法可用 . 这将逃脱许多破坏CSV的事情 .

  • 8

    双引号对我没有用,它对我有用 \" . 如果要将双引号作为示例,则可以设置 \"\" .

    您可以构建公式,例如:

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

    将写入csv:

    = IF(C3 = 1,“”,B3)

相关问题