ruby-1.9.2でCSVファイルをインポートしようとすると信じられないほどの時間がありました。CSV引用エラーをインポートするとナッツが動く
私が解析しようとしているファイルがあります。col_sep
csv.txt(:列
- コンマ
- 引用符のように '@' を使用しています代表入力、実数101kライン):
㔾@㔾@jié@"seal" radical in Chinese characters, (Kangxi radical 26)
マイコード:
require 'csv' CSV.foreach("/Users/adam/Desktop/csvtest.txt", {:col_sep => "@"}) do |row| puts row.to_s end
マイ所望の出力:
["㔾", "㔾", "jié", "\"seal\" radical in Chinese characters, (Kangxi radical 26)"]
私は、出力のために何を得る:
CSV::MalformedCSVError: Unclosed quoted field on line 1. from /Users/adam/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/CSV.rb:1910:in `block in shift' from /Users/adam/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/CSV.rb:1825:in `loop' from /Users/adam/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/CSV.rb:1825:in `shift' from /Users/adam/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/CSV.rb:1767:in `each' from /Users/adam/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/CSV.rb:1202:in `block in foreach' from /Users/adam/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/CSV.rb:1340:in `open' from /Users/adam/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/CSV.rb:1201:in `foreach' from (irb):31 from /Users/adam/.rvm/rubies/ruby-1.9.2-p290/bin/irb:16:in `<main>'
それが閉じていない引用されfeildsがあると言うが、私はそれを見ることができます引用符を開閉します。
引用符をエスケープすると何も行われません。私は同じエラー(
[email protected]""seal"" r...
)を取得します。 一重引用符に変更すると機能します([email protected]'seal' r...
)。 問題は二重引用符で囲む必要があることです。アイデア?
+1 CSV仕様。 HTMLと同様に、完全に濫用され、無視されます。両方のために、パーサーにデータを渡す前にデータを修正することが必要な時があります。私はそれもこの問題の解決策だと思いますが、私はあなたが 'quote_char =>" \ x00 "'でパーサーをだますのが好きです。良くやった。 –
私は、実際にヌル文字を持つ 'bcp' MSSQLダンプからUTF-16を取得しています。ちょうど楽しみのために私は代替として雪だるまキャラクター(☃)を選んだ。 :) –
この "" \ x00 "トリックは美しく動作します:-) – Avishai