более быстрая обработка исключений CSV - PullRequest
1 голос
/ 06 июля 2011

Я сталкиваюсь с проблемой MalformedCSVError в CSV-файле. Ниже приведена строка, где я застрял:

"# буквально сотни источников доступных баз данных" IP-to-Country ". Man"

Поскольку строка содержит двойную кавычку. Выполнение здесь остановлено. Исключением является: FasterCSV :: MalformedCSVError

Как я могу справиться с этой ситуацией. Я не могу также отредактировать CSV-файл ..

Пожалуйста, помогите мне в этом.

1 Ответ

5 голосов
/ 06 июля 2011

Этот пример действительно искажен.Символ кавычки выглядит как двойные кавычки, но внутри него есть двойные кавычки (следует снова использовать двойные кавычки).Вы действительно должны отклонить это как искаженное.

В качестве хакерского обходного пути , вы можете попробовать изменить символ кавычки. Из документации для 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

Обратите внимание, что обработчики принимаюти отклонить, что позволяет нам отделить принятие и отклонение от ядра синтаксического анализа.

...