2012-10-16 49 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