【问题标题】:CSV and fields with spacesCSV 和带空格的字段
【发布时间】:2014-07-23 16:31:50
【问题描述】:

我正在使用Text::CSV_XS 创建 CSV 文件。我看到如果一个字段有一个空格,那么它会在双引号内输出,例如

john,smith,"Some address",,,,bla  

我想知道示例中的双引号是强制性的吗?或者是一些配置选项?

【问题讨论】:

    标签: perl csv


    【解决方案1】:

    正如 Subbeh 已经建议的那样,您可以在调用 new 时将 quote_char 设置为 undef,以根据 https://metacpan.org/pod/Text::CSV_XS#new 抑制这种情况

    不过,我会质疑你是否应该。在 CSV 规范 https://www.rfc-editor.org/rfc/rfc4180 中,这些引号始终是允许的,有时是必需的(尽管严格来说,仅当字段包含分隔符或引号字符本身时)。因为它们在那里是完全有效的,并且您稍后将数据传递给任何 CSV 解析工具都可以应付......我倾向于让 Text::CSV 做它的事情。

    特别是,如果您按照建议将quote_char 设置为undef,则包含sep_char(通常为逗号)的字段将导致损坏。

    编辑:您可以在对 new 的调用中将 quote_space 设置为 false 值,以防止这种特定行为(引用带有空格的字段),CSV 规范既不强制也不强制禁止。

    【讨论】:

    • 使用quote_space 而不是quote_char 来处理包含空格的字段的引用。
    • 哦,很好,我会把它折叠到我的答案中!
    【解决方案2】:

    您可以设置quote_char 来改变这种行为:

    quote_char

    引用包含空格或二进制数据的字段的字符,默认为双引号字符 (")。 undef 值禁止引用字符(仅适用于简单情况)。仅限于单字节字符,通常在0x20(空格)到0x7E(波浪号)的范围内。

    quote_char不能等于sep_char

    来自https://metacpan.org/pod/Text::CSV_XS#new

    【讨论】:

    • 你知道链接的文档来自一个古老的 Perl 版本吗?一般来说,metacpan.org/pod/Text::CSV_XS 是一个更有用的链接。
    • 谢谢,我知道了。 metacpan 网站不会在此处加载
    • 澄清一下,我说的不是网站,而是 perl 5.8 的时代(以及与之捆绑的模块/文档)
    • 使用quote_space 而不是quote_char 来处理包含空格的字段的引用。将 quote_char 设置为 undef 将搞砸包含分隔符的字段。
    猜你喜欢
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 2021-05-15
    • 1970-01-01
    相关资源
    最近更新 更多