CSV.read Неверное цитирование в строке x - PullRequest
35 голосов
/ 26 марта 2012

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

"Illegal quoting in line 53657."

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

Ответы [ 3 ]

70 голосов
/ 21 сентября 2012

У меня была эта проблема в строке вроде 123,456,a"b"c

Проблема в том, что синтаксический анализатор CSV ожидает, что ", если они появятся, полностью окружат текст, разделенный запятыми.

Решение использует символ кавычки помимо ", который, я уверен, не появится в моих данных:

CSV.read(filename, :quote_char => "|")

18 голосов
/ 05 января 2018

Опция liberal_parsing доступна начиная с версии Ruby 2.4 для подобных случаев.Из документации:

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

Комувключите его, передайте его в качестве опции методам чтения / анализа / нового CSV:

CSV.read(filename, liberal_parsing: true)
4 голосов
/ 26 марта 2012

Не позволяйте CSV одновременно читать и анализировать файл.

Просто прочитайте файл самостоятельно и передайте каждую строку CSV.parse_line, а затем rescue любые исключения, которые он выдает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...