1

我在 csv 文件中遇到 MalformedCSVError 问题。下面给出了我卡住的行:

“#字面上有数百个可用的“IP-to-Country”数据库来源。伙计”

因为该行包含双引号。此处停止执行异常是:FasterCSV::MalformedCSVError

我该如何处理这种情况。我也无法编辑 csv 文件。

请帮助我。

4

1 回答 1

5

该示例确实格式不正确。引号字符似乎是双引号,但其中嵌入了双引号(应该再次用双引号转义)。您确实应该将其视为格式错误而拒绝。

作为一个 hacky 解决方法,您可以尝试更改引号字符 从 FasterCSV 的文档中,您可以传递 :quote_char => "'" 这应该可以让您访问数据,但现在您将获得双引号作为字符串的一部分 - 混乱。

真的,你不应该求助于编辑源数据——你的程序应该优雅地处理错误,通知某人并继续。

我们在 NGINX 后面的批处理模式下使用 FasterCSV。当解析行发生错误时,我们会捕获异常,记下导致错误的行并继续。解析完所有行后,我们会向用户发送电子邮件,让他们知道哪些行无法处理。

像这样的东西对我们有用......

    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

请注意接受和拒绝的处理程序,这使我们能够将接受和拒绝与解析的核心分离。

于 2011-07-06T09:24:04.163 回答