【问题标题】:How can I read CSV with no quote_char in ruby?如何在 ruby​​ 中读取没有 quote_char 的 CSV?
【发布时间】:2014-06-16 03:32:10
【问题描述】:

我有一个没有引号字符的 TSV 文件。每当数据中出现\t 时,它总是分隔列,而不是列值的一部分。每当出现" 时,它始终是列值的一部分,并且永远不会包含列值。

我想在 Ruby 中阅读这个 CSV,但它给了我

/Users/.rvm/rubies/ruby-1.9.3-p545/lib/ruby/1.9.1/csv.rb:1925:in `block (2 levels) in shift': Illegal quoting in line 9506. (CSV::MalformedCSVError)

我的代码是:

CSV.foreach(input_file, { :col_sep => "\t", :headers => true}) do |row|
   puts row
end

有什么办法可以解决这个问题?

【问题讨论】:

标签: ruby parsing csv double-quotes


【解决方案1】:

事实证明,我可以通过输入 quote_char => "\x00" 来欺骗它认为零字节是引号字符来修复它。

【讨论】:

    【解决方案2】:

    liberal_parsing option 可用于此类情况。来自文档:

    当设置为真值时,CSV 将尝试解析不符合 RFC 4180 的输入,例如未加引号的字段中的双引号。

    在您的示例中,这将是:

    CSV.foreach(input_file, { :col_sep => "\t", :headers => true, :liberal_parsing => true }) do |row|
      puts row
    end
    

    【讨论】:

      猜你喜欢
      • 2013-05-06
      • 2017-01-08
      • 1970-01-01
      • 1970-01-01
      • 2019-06-01
      • 2017-08-20
      • 1970-01-01
      • 2019-03-08
      • 2013-06-01
      相关资源
      最近更新 更多