私はcsvファイルでMalformedCSVErrorの問題に直面しています.そして、私が立ち往生している行は以下の通りです:
"# 利用可能な "IP-to-Country" データベースの文字通り何百ものソース。男"
行に二重引用符が含まれているため.実行はここで停止しました例外は: FasterCSV::MalformedCSVError
この状況をどのように処理できますか.csvファイルも編集できません..
これについて私を助けてください。
その例は実際には不正です。引用符文字は二重引用符のように見えますが、その中に二重引用符が埋め込まれています (再度二重引用符でエスケープする必要があります)。これは不正な形式として拒否する必要があります。
少しハックな回避策として、引用符文字を変更してみることができます。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
accept と reject のハンドラーに注意してください。これにより、解析のコアから受け入れと拒否を切り離すことができます。