一部のフィールドが複数行である SQL からテーブルとクエリをエクスポートしました。
CSV を読み取る Ruby (1.9+) の方法は次のようになります。
require 'csv'
CSV.foreach("exported_mysql_table.csv", {:headers=>true}) do |row|
puts row
end
私のデータが次のような場合、これはうまく機能します:
"id","name","email","potato"
1,"Bob","bob@bob.bob","omnomnom"
2,"Charlie","char@char.com","andcheese"
4,"Doug","diggyd@diglet.com","usemeltattack"
(最初の行はヘッダー/属性です)
しかし、私が持っている場合:
"id","name","address","email","potato"
1,"Bob","---
- 101 Cottage row
- Lovely Village
- \"\"
","bob@bob.bob","omnomnom"
2,"Charlie","---
- 102 Flame Street
- \"\"
- \"\"
","char@char.com","andcheese"
4,"Doug","---
- 103 Dark Cave
- Next to some geo dude
- So many bats
","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)
これは、複数の行にまたがるため、行末に閉じ引用符がないためと思われます。
(私は「FasterCSV」を試しました。その宝石はRuby 1.9から「csv」になりました)