我在 csv 文件中遇到 MalformedCSVError 问题。下面给出了我卡住的行:
“#字面上有数百个可用的“IP-to-Country”数据库来源。伙计”
因为该行包含双引号。此处停止执行异常是:FasterCSV::MalformedCSVError
我该如何处理这种情况。我也无法编辑 csv 文件。
请帮助我。
该示例确实格式不正确。引号字符似乎是双引号,但其中嵌入了双引号(应该再次用双引号转义)。您确实应该将其视为格式错误而拒绝。
作为一个 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
请注意接受和拒绝的处理程序,这使我们能够将接受和拒绝与解析的核心分离。