Как читать CSV без кавычки в ruby?

У меня есть TSV файл без кавычек. Всякий раз, когда в данных присутствует \t, он всегда должен разделять столбцы и никогда не является частью значения столбца. Всякий раз, когда выполняется ", он всегда является частью значения столбца и никогда не должен включать значения столбца.

Я хотел бы прочитать этот CSV в Ruby, но он дает мне

/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

Как обойти эту проблему?

Ответ 1

Оказывается, я мог бы исправить это, поместив quote_char => "\x00", чтобы обмануть его, думая, что нулевой байт является цитатой char.

Ответ 2

liberal_parsing опция доступна для таких случаев. Из документации:

Если установлено значение true, CSV попытается проанализировать ввод, не соответствующий RFC 4180, например, двойные кавычки в некотируемых полях.

В вашем примере это будет:

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