15

FasterCSV (1.5.0) で CSV 解析の問題を発見しました。これは本物のバグのようですが、回避策があることを願っています。

基本的に、フィールドが引用符で囲まれているときにセパレーター (私の場合はコンマ) の後にスペースを追加すると、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 のバグですか?

4

3 に答える 3

14

ここMalformedCSVErrorは正解です。

CSV 形式の先頭/末尾のスペースは無視されず、フィールドの一部と見なされます。したがって、これは、スペースでフィールドを開始し、そのフィールドにエスケープされていない二重引用符が含まれていることを意味します。これにより、不正な引用エラーが発生します。

おそらく、このライブラリは、あなたが使用した他のライブラリよりも厳密です.

于 2009-11-27T10:38:46.247 に答える
2

:col_sepこのオプションで正規表現が可能になることを期待していましたが、読み取りと書き込みの両方に使用されているようで、残念です。ドキュメントにはあまり期待が持てず、変更を要求したりパッチを送信したりすることで満たすことができるよりも、おそらくあなたのニーズはすぐに現れます;-)

#parse_line明示的に電話をかけている場合は、いつでも電話をかけることができます

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

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

于 2009-11-27T11:50:43.997 に答える
2

:col_sep: オプションを ', ' に設定して、そのようなファイルを解析できるようにすることもできます。

于 2009-11-27T10:36:25.067 に答える