如何在ruby中读取没有引号的CSV?
我有一个没有引号字符的TSV文件。每当数据中出现如何在ruby中读取没有引号的CSV?,ruby,parsing,csv,double-quotes,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) 我的代码
\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
有什么办法可以解决这个问题吗?事实证明,我可以通过放置
quote\u char=>“\x00”
来解决这个问题,让它认为零字节就是quote char。可以用于这种情况。从文档中可以看到:
当设置为真值时,CSV将尝试解析与RFC 4180不一致的输入,例如未加引号的字段中的双引号
在您的示例中,这将是:
CSV.foreach(input_file, { :col_sep => "\t", :headers => true, :liberal_parsing => true }) do |row|
puts row
end
我强烈推荐James Edward Gray II的fastercsv gem。它使生活更简单。@6ftDan的可能副本:Ruby 1.9.3中的标准库csv是fastercsv AFAIK。