2012-10-16 47 views
0

我從SQL導出表和查詢。Ruby CSV從MySQL導出的字符串和數字csv

紅寶石(1.9+)的方式來閱讀CSV似乎是:

require 'csv' 

CSV.foreach("exported_mysql_table.csv", {:headers=>true}) do |row| 
    puts row 
end 

偉大的工程,如果你的數據是這樣的:

"name","email","potato" 
"Bob","[email protected]","omnomnom" 
"Charlie","[email protected]","andcheese" 
"Doug","[email protected]","usemeltattack" 

工作正常(第一行是標題,屬性)。但是,如果數據是這樣的:

"id","name","email","potato" 
1,"Bob","[email protected]","omnomnom" 
2,"Charlie","[email protected]","andcheese" 
4,"Doug","[email protected]","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',該寶石由於紅寶石變成'csv'1.9)

編輯:

指出的代碼工作正常(DERP),一直在尋找在錯誤的地方,它是多線領域的錯誤,問題轉移到Ruby CSV read multiline fields

回答

1

使用輸入你提供,我無法重現這一點。

1.9.3p194 :001 > require 'csv' 
=> true 
1.9.3p194 :002 > CSV.foreach("test.txt", {:headers => true}) { |row| puts row } 
1,Bob,[email protected],omnomnom 
2,Charlie,[email protected],andcheese 
4,Doug,[email protected],usemeltattack 
=> nil 

我在我們的環境之間唯一的區別是您使用的是rbenv,而我正在使用RVM。我還在另一臺機器上對ruby 1.9.3-p194進行了驗證。您提供的輸入是否與您的csv中的內容完全匹配?

+0

唉問題是多線!我應該給出一個更好的例子,(並且實際測試了這一個-_-)。要開始新的問題。謝謝! – xxjjnn