fasterCsv异常处理

Nee*_*esh 1 ruby fastercsv

我正面临csv文件中的MalformedCSVError问题.下面给出了我被卡住的地方:

"#字面上有数百个"IP-to-Country"数据库来源."

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

我怎么能处理这种情况.我也不能编辑csv文件..

请帮帮我.

Chr*_*ley 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
Run Code Online (Sandbox Code Playgroud)

请注意接受和拒绝的处理程序允许我们将接受和拒绝与解析核心分离.