2009-11-27 4 views
15

私はFasterCSV(1.5.0)でCSV解析の問題を発見したを使用して解析するが、私はのための回避策はあります願っていたとの基本的な問題を克服します。CSVは、本物のバグのように思えるFasterCSV宝石

フィールドが引用符で囲まれている場合、基本的に区切り記号(私の場合はコンマ)の後にスペースを追加すると、MalformedCSVErrorが生成されます。

ここでは簡単な例です:

# No quotes on fields -- works fine 
FasterCSV.parse_line("one,two,three") 
=> ["one", "two", "three"] 

# Quotes around fields with no spaces after separators -- works fine 
FasterCSV.parse_line("\"one\",\"two\",\"three\"") 
=> ["one", "two", "three"] 

# Quotes around fields but with a space after the first separator -- fails! 
FasterCSV.parse_line("\"one\", \"two\",\"three\"") 
=> FasterCSV::MalformedCSVError: Illegal quoting on line 1. 

アム私は怒っ行く、またはこれはFasterCSVのバグですか? col_sep:

答えて

14

MalformedCSVErrorはここに正しいです。 CSV形式で

大手/末尾のスペースは、彼らはフィールドの一部とみなされ、無視されていません。つまり、スペースでフィールドを開始し、そのフィールドにエスケープされていない二重引用符を含めて、不正な引用エラーが発生することを意味します。

多分、このライブラリはあなたが使っている他のものより厳密です。

+0

フィールドは、実際に(最初の文字が引用符ではないので)、引用符で囲まれた引用符は、フィールドの内容の一部として取られるべきであるとされていないことを言った空間ではないですか? –

+1

私は間違っているように見えます。 "フィールドが二重引用符で囲まれていない場合は、二重引用符がフィールド内に表示されないことがあります。 - http://tools.ietf.org/html/rfc4180#section-2 –

+0

あなたは正しいです、私はCSVのための 'スペック'があることを認識しませんでしたが、それがあるようです。より速いCSVは確かに非常に厳格です。 – Olly

2

たぶんあなたが設定することができ、それはそのようなファイルを解析作るために「」のオプション。

2

私は:col_sepオプションは、正規表現を許可するかもしれないと期待していたが、恥で読み出しと書き込みの両方のために使われているようです。あなたが明示的に#parse_lineを呼び出している場合、あなたは常に

を呼び出すことができます;-)

documentationはあまり期待を保持していないと、あなたの必要性は、おそらく変更を要求するか、パッチを提出することによって満たすことができるよりもより迅速です

gsub(/,\s*/, ',') 

入力行に入力してください。引用符で囲まれた文字列の中にコンマスペースがある可能性がある場合、正規表現は大幅に変更する必要があります。 (私は適切なタグを付けてこのような質問を再投稿することをお勧めします。

関連する問題