Ответ 1
Оказывается, я мог бы исправить это, поместив quote_char => "\x00"
, чтобы обмануть его, думая, что нулевой байт является цитатой char.
У меня есть 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
Как обойти эту проблему?
Оказывается, я мог бы исправить это, поместив quote_char => "\x00"
, чтобы обмануть его, думая, что нулевой байт является цитатой char.
liberal_parsing
опция доступна для таких случаев. Из документации:
Если установлено значение true, CSV попытается проанализировать ввод, не соответствующий RFC 4180, например, двойные кавычки в некотируемых полях.
В вашем примере это будет:
CSV.foreach(input_file, { :col_sep => "\t", :headers => true, :liberal_parsing => true }) do |row|
puts row
end