2

CSVファイルに次の行があり、解析時に問題が発生します。

312,'997639',' 2','John, Doe. "J.D." ',' ','2000 ',' ','Street ','City ','NY','99999','','2010-02-17 19:12:04','2010-02-17 19:12:04';

次のパラメーターで解析しています。

FasterCSV.foreach(file, {:headers => true, :quote_char => '"', :col_sep => "','"} ) do |row|

ただし、行列内の「JD」が原因で、上記のような行で爆発します。FasterCSVでその行を適切に解析するにはどうすればよいですか?

ありがとう!

4

3 に答える 3

3

:quote_charあなたがすべきで'あり、あなた:col_sepがすべきであるように私には見えます,。その場合:

FasterCSV.foreach(file, {:headers => true, :quote_char => "'", :col_sep => ','} ) ...
于 2010-02-19T00:51:38.567 に答える
1

あなたはそれをすることはできません。FasterCSVでは引用符を1つしか選択できず、アプリケーションには2つ必要です。FasterCSVは、次のように引用符をエスケープしてマッチャーをプリコンパイルするため、文字の代わりに正規表現を渡すようなかわいいことを行う方法はありません。

# prebuild Regexps for faster parsing
esc_col_sep = Regexp.escape(@col_sep)
esc_row_sep = Regexp.escape(@row_sep)
esc_quote   = Regexp.escape(@quote_char)
@parsers = {
  :any_field      => Regexp.new( "[^#{esc_col_sep}]+",
                                 Regexp::MULTILINE,
                                 @encoding ),
  :quoted_field   => Regexp.new( "^#{esc_quote}(.*)#{esc_quote}$",
                                 Regexp::MULTILINE,
                                 @encoding ),
  ...
}
于 2010-02-19T01:35:25.390 に答える
0

FasterCSVを曲げて、このデータで必要な方法で動作させることができなかったため、最終的には、適切なCSV出力を使用してデータの新しいダンプを要求するだけでした。試みてくれてありがとう!

于 2010-02-19T20:24:43.300 に答える