Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby CSV从MySQL导出的CSV读取字符串和数字_Sql_Ruby_Csv_Fastercsv - Fatal编程技术网

Ruby CSV从MySQL导出的CSV读取字符串和数字

Ruby CSV从MySQL导出的CSV读取字符串和数字,sql,ruby,csv,fastercsv,Sql,Ruby,Csv,Fastercsv,我从SQL导出了表和查询 ruby(1.9+)读取csv的方式似乎是: 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"

我从SQL导出了表和查询

ruby(1.9+)读取csv的方式似乎是:

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"
工作正常(第一行是标题,属性)。但是,如果数据如下所示:

"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),查找位置错误,多行字段错误,使用您提供的输入将问题移动到

,我无法重现此问题

1.9.3p194 :001 > require 'csv'
 => true 
1.9.3p194 :002 > CSV.foreach("test.txt", {:headers => true}) { |row| puts row }
1,Bob,bob@bob.bob,omnomnom
2,Charlie,char@char.com,andcheese
4,Doug,diggyd@diglet.com,usemeltattack
 => nil

我在我们的环境中看到的唯一区别是您使用的是rbenv,而我使用的是RVM。我还用ruby 1.9.3-p194在另一台机器上验证了这一点。您提供的输入是否与csv中的内容完全匹配?

ahhh问题在于多行!我应该给出一个更好的例子,(并实际测试了这个--)。开始新的问题。谢谢