2012-03-25 8 views
28

大量のデータを含むruby CSV.readを使用しています。例えば随時ライブラリ出会い不十分フォーマットされたライン、:CSV.read不正な行xの引用

"Illegal quoting in line 53657." 

各CSVファイルを通過し、書式設定を修正し、その後、ラインを無視して、それをスキップするために容易になるだろう。これどうやってするの?

答えて

62

私はこの問題は、彼らが表示される場合はCSVパーサが完全にコンマ区切りのテキストを囲むように、"を期待している123,456,a"b"c

のような行でこの問題がありました。

ソリューションは、私は私のデータに表示されないだろうと確信していた"以外に引用符文字を使用します。

CSV.read(filename, :quote_char => "|")

+1

を。変更:quote_charは私の状況で私を助けてくれました。 –

+0

これは私の状況でもうまくいきましたが、エラーなしで100以上のCSVデータを処理しました – DataHerder

+0

2015年も同様に続きます:) ありがとうございました。私はここに到達するのに数時間かかりました:) – Suraj

5

CSVにファイルの読み取りと解析の両方をさせません。

自分でファイルを読んで、CSV.parse_lineに各行を渡してから、rescueに例外をスローします。

2

liberal_parsingオプションは、このような場合のためのRuby 2.4以降で利用可能です。

trueに設定すると、引用符で囲まれていないフィールドの二重引用符など、RFC 4180に準拠していない入力を解析しようとします。

/パース/新しいメソッド読みCSVへのオプションとして渡し、それを有効にするには:彼は、特に大量のデータを持っており、ちょうどエラーをスキップしたい要求者の状況では

CSV.read(filename, liberal_parsing: true) 
関連する問題