Кажется, распространенной проблемой является наличие ошибочного CSV-файла при попытке анализа массива, импорта модели AR и т. д. Я не нашел рабочего решения, кроме открытия в MS Excel и save as
каждый день (недостаточно хорошо!).
В ежедневно обновляемом CSV-файле из 60 000 строк содержится ошибка: CSV::MalformedCSVError: Illegal quoting in line 95.
(в качестве примера). Я рад пропустить/забыть искаженную строку (т.е. она имеет только 1/60000-е значение).
Первая попытка — использовать CSV.foreach
или подобное, и просто begin
rescue
next
end
, чтобы пропустить ошибку. Нет игральных костей. Я бы хотел, чтобы этот ТАК принятый ответ был немного более подробным: CSV .read Недопустимое цитирование в строке x (т. е. «просто прочтите файл самостоятельно» — кажется, я пробовал это ниже).
И этот SO Q&A (Как я могу дополнительно обработать строку данных, из-за которой библиотека Ruby FasterCSV выдает ошибку MalformedCSVError?) кажется многообещающим, но принятый ответ не... совсем... работает в моем, казалось бы, аналогичный случай (измененный, например, ясность), выполненный через rake task:
file_path = "filename.csv"
my_array = []
File.open(file_path).each do |line| # `foreach` instead of `open..each` does the same
begin
CSV.parse(line) do |row|
my_array << row
end
rescue CSV::MalformedCSVError => er
puts er.message
counter += 1
next
end
counter += 1
puts "#{counter} read success"
end
Выход =>
1 read success
2 read success
...
94 read success
Illegal quoting in line 1 # strange that it says `line 1` vs `95`, which may be the crux of what I do not understand here (e.g. some kind of look ahead error)
96 read success
...
60000 read success
# I checked using `line.inspect`, and the 60000th row is indeed being read/inspected
rake aborted!
CSV:MalformedCSVError: Illegal quoting in line 95
my_array.count
, и в нем было 59999 строк. - person JHFirestarter   schedule 17.05.2016