【问题标题】:fasterCsv exception handling更快的CSV异常处理
【发布时间】:2011-07-06 08:49:56
【问题描述】:

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

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

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

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

请帮帮我。

【问题讨论】:

  • 我通过添加这个解决了 :quote_char => '`' ....
  • 嗯,我可以相信他的回答,但他只是处理了异常,我不需要任何类型的 csv 文件中的异常:(

标签: ruby fastercsv


【解决方案1】:

该示例确实格式错误。引号字符似乎是双引号,但其中嵌入了双引号(应该再次用双引号转义)。你真的应该拒绝这个格式错误。

作为一个 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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 2020-06-26
    • 2015-01-17
    相关资源
    最近更新 更多