【问题标题】:CSV File with values having single quote within quote text qualifierCSV 文件,其值在引用文本限定符中具有单引号
【发布时间】:2019-01-03 14:52:55
【问题描述】:

我正在尝试解析具有单引号作为文本限定符的 CSV 文件。这里的问题是一些带有单引号文本限定符的值本身包含单引号 例如:

'Fri, 24 Feb 2017 17:44:57 +0700','th01ham000tthxs','/','','Writer's Tools Data','7.1.0.0',

我正在努力解析文件,因为在这一行之后,所有剩余的行都被替换了。

我尝试使用 OpenCSV、UnivocityParsers,但没有得到任何运气。 如果我将上面的行放在 excel (Excel Image) 中并将文本限定符作为单引号提供,它会给出正确的结果,而不会发生任何行位移。

【问题讨论】:

  • 如果你让它在 excel 中工作听起来你找到了解决方案
  • 但我不知道 excel 是如何处理这个问题的。我正在考虑通过 OpenCSV 或 UnivocityParsers 实现类似的功能,因为这些库可能会处理此类场景

标签: excel csv opencsv univocity


【解决方案1】:

如果使用 java,JRecord 库应该处理文件。

工作原理:如果字段以引号开头(例如 、'),则专门查找 '、' '',''''',' 等(奇数个引号后跟一个逗号行尾标记)。如果出现以下情况,这种方法就会失效:

  • 嵌入的引号是字段中的最后一个字符,即 'Field with quote '',
  • 引号和逗号之间的空格,即 'Field' ,, '

这是ReCsvEditor中的行


同样在ReCsvEditor编辑文件时,如果选择Generate >>> Java Code >>> ...会生成Java/JRecord Code来读取文件。

免责声明:我是 JRecord / ReCvEditor 的作者。此外,ReCsvEditor Generate 功能是新的,需要更多的工作

【讨论】:

    【解决方案2】:

    尝试根据您的场景配置 univocity-parsers 来处理未转义的引号。 'Writer's Tools Data' 有一个未转义的引号。从您的输入中,我可以看出您希望使用 STOP_AT_CLOSING_QUOTE 作为解决这些值的策略。

    将此行添加到您的代码中,它应该可以正常工作:

    parserSettings.setUnescapedQuoteHandling(UnescapedQuoteHandling.STOP_AT_CLOSING_QUOTE);
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-11
      • 2015-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多