Невозможно проанализировать файл CSV - "CSV::MalformedCSVError: поля без кавычек не допускают \r или \n"

Я пытаюсь проанализировать загруженные файлы CSV. Вот полное сообщение об ошибке:

[Worker(host:PC.local pid:69594)] Job ImportJob (id=4) FAILED (3 prior attempts) with CSV::MalformedCSVError: Unquoted fields do not allow \r or \n (line 1).

И файлы CSV выглядят так:

A1;A2;A3;A4;A5
B1;B2;B3;B4;B5
C1;C2;C3;C4;C5

И вот как я перебираю данные в файле CSV:

data = SmarterCSV.process(
  file,
  {
    :col_sep => ';',
    :chunk_size => 100,
    :remove_empty_values => false,
    :remove_empty_hashes => false
  }
) do |d|

В чем здесь проблема? Я пытался поместить заголовок в файл, даже пытался удалить его (версия опубликована выше), но в обоих случаях я получаю ту же ошибку. Как мне от этого избавиться?

2 ответа

Предполагая, что файл CSV был создан в Windows, неудивительно, что окончание строки - "\r\n". Попробуйте явно сделать это вашим разделителем строк:

:row_sep => "\r"

Собираем все вместе:

data = SmarterCSV.process(file, 
  :col_sep => ';', 
  :row_sep => "\r", 
  :chunk_size => 100, 
  :remove_empty_values => false, 
  :remove_empty_hashes => false) do |d|

Я столкнулся с этой проблемой, но со встроенным модулем CSV.

Я решил это, используя режим чтения ввода-вывода в виде текста: "rt", а не "r":

require 'csv'

CSV.open(file_name, 'rt').each do |row|
  # blah, blah
end
Другие вопросы по тегам