SQLからテーブルとクエリをエクスポートしました。
csvを読み取るルビー(1.9+)の方法は次のようになります。
require 'csv'
CSV.foreach("exported_mysql_table.csv", {:headers=>true}) do |row|
puts row
end
データが次のような場合、これはうまく機能します。
"name","email","potato"
"Bob","bob@bob.bob","omnomnom"
"Charlie","char@char.com","andcheese"
"Doug","diggyd@diglet.com","usemeltattack"
正常に動作します(最初の行はヘッダー、属性です)。ただし、データが次のような場合:
"id","name","email","potato"
1,"Bob","bob@bob.bob","omnomnom"
2,"Charlie","char@char.com","andcheese"
4,"Doug","diggyd@diglet.com","usemeltattack"
次に、エラーが発生します。
.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/csv.rb:1894:in `block (2 levels) in shift': Missing or stray quote in line 2 (CSV::MalformedCSVError)
これは、IDが文字列ではなく数値として格納されているため、引用符がなく、csvパーサーがすべてのエントリに引用符が含まれていることを想定しているためだと思います。理想的には、「Bob」を文字列として、1を数値として読みたい(そしてそれをハッシュのハッシュに詰め込む)
(「FasterCSV」を試しましたが、そのgemはruby 1.9以降「csv」になりました)
編集:
例が正常に機能している(derp)、間違った場所を探している、複数行のフィールドでエラーが発生した、質問がRubyCSVに移動された複数行のフィールドを読み取ることが指摘されました