1

私はcsvファイルでMalformedCSVErrorの問題に直面しています.そして、私が立ち往生している行は以下の通りです:

"# 利用可能な "IP-to-Country" データベースの文字通り何百ものソース。男"

行に二重引用符が含まれているため.実行はここで停止しました例外は: FasterCSV::MalformedCSVError

この状況をどのように処理できますか.csvファイルも編集できません..

これについて私を助けてください。

4

1 に答える 1

5

その例は実際には不正です。引用符文字は二重引用符のように見えますが、その中に二重引用符が埋め込まれています (再度二重引用符でエスケープする必要があります)。これは不正な形式として拒否する必要があります。

少しハックな回避策として、引用符文字を変更してみることができます。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 のハンドラーに注意してください。これにより、解析のコアから受け入れと拒否を切り離すことができます。

于 2011-07-06T09:24:04.163 に答える