Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在ruby中读取没有引号的CSV?_Ruby_Parsing_Csv_Double Quotes - Fatal编程技术网

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

如何在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) 我的代码

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

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

事实证明,我可以通过放置
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。