Подтвердить что ты не робот

CSV.read Недопустимое цитирование строки x

Я использую ruby ​​CSV.read с массивными данными. Время от времени библиотека сталкивается с плохо отформатированными строками, например:

"Illegal quoting in line 53657."

Было бы проще проигнорировать строку и пропустить ее, затем пройти через каждый csv и исправить форматирование. Как я могу это сделать?

4b9b3361

Ответ 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