CSV.read Недопустимое цитирование строки x
Я использую ruby CSV.read с массивными данными. Время от времени библиотека сталкивается с плохо отформатированными строками, например:
"Illegal quoting in line 53657."
Было бы проще проигнорировать строку и пропустить ее, затем пройти через каждый csv и исправить форматирование. Как я могу это сделать?
Ответы
Ответ 1
У меня была эта проблема в строке типа 123,456,a"b"c
Проблема заключается в том, что синтаксический анализатор CSV ожидает, что "
, если они появятся, полностью окружает текст с разделителями-запятыми.
Решение использует символ кавычки помимо "
, который, я уверен, не появлялся в моих данных:
CSV.read(filename, :quote_char => "|")
Ответ 2
Опция liberal_parsing
доступна начиная с версии Ruby 2.4 для подобных случаев. Из документации:
Когда установлено истинное значение, CSV попытается проанализировать ввод, не соответствующий RFC 4180, например, двойные кавычки в полях без кавычек.
Чтобы включить его, передайте его в качестве опции в методы CSV read/parse/new:
CSV.read(filename, liberal_parsing: true)
Ответ 3
Не позволяйте CSV читать и анализировать файл.
Просто прочитайте файл самостоятельно и передайте каждую строку в CSV.parse_line
, а затем rescue
любые исключения, которые он выбрал.
Ответ 4
Попробуйте ввести символ двойной кавычки "
в качестве символа кавычки:
require 'csv'
CSV.foreach(file,{headers: :first_row, quote_char: "\x00"}) do |line|
p line
end