Этот пример действительно искажен.Символ кавычки выглядит как двойные кавычки, но внутри него есть двойные кавычки (следует снова использовать двойные кавычки).Вы действительно должны отклонить это как искаженное.
В качестве хакерского обходного пути , вы можете попробовать изменить символ кавычки. Из документации для FasterCSV вы можете передать: quote_char =>«» и это должно позволить вам получить доступ к данным, но теперь вы получите двойные кавычки как часть строки - грязно.
Действительно, вам не нужно прибегать к редактированиюисходные данные - ваша программа должна корректно обработать ошибку, сообщить кому-то и продолжить.
Мы используем FasterCSV в пакетном режиме за NGINX.Когда происходит ошибка при разборе строки, мы перехватываем исключение, отмечаем строку, вызвавшую ошибку, и продолжаем.После того, как все строки проанализированы, мы отправляем пользователю электронное письмо, чтобы сообщить им, какие строки не удалось обработать.
Нечто подобное работает у нас ...
io.each_line do |line|
the_line = line.chomp
begin
row = FasterCSV.parse_line(the_line)
ok, message = acceptable?(row)
if not ok
reject(io.lineno, the_line, message)
else
accept(row, the_line)
end
rescue FasterCSV::MalformedCSVError => e
reject(io.lineno, the_line, e.to_s)
end
end
Обратите внимание, что обработчики принимаюти отклонить, что позволяет нам отделить принятие и отклонение от ядра синтаксического анализа.