如何在ruby中读取没有quote_char的CSV?

时间:2014-04-30 00:12:16

标签: ruby parsing csv double-quotes

我有一个没有报价字符的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

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

2 个答案:

答案 0 :(得分:27)

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

答案 1 :(得分:2)

liberal_parsing option可用于此类案件。来自文档:

  

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

在您的示例中,这将是:

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