我有一个没有报价字符的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
有什么方法可以解决这个问题吗?
答案 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