【问题标题】:Ruby CSV read strings and numbers from MySQL exported csvRuby CSV 从 MySQL 导出的 csv 中读取字符串和数字
【发布时间】:2012-10-16 12:11:42
【问题描述】:

我从 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"

然后我们得到错误:

.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”,从 ruby​​ 1.9 开始,该 gem 变成了“csv”)

编辑:

被指出该示例运行良好(derp),在错误的地方寻找,多行字段出错,问题移至Ruby CSV read multiline fields

【问题讨论】:

    标签: sql ruby csv fastercsv


    【解决方案1】:

    使用您提供的输入,我无法重现此内容。

    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 中的内容完全匹配?

    【讨论】:

    • 啊啊啊问题出在多行!我应该给出一个更好的例子,(并实际测试了这个-_-)。将开始新的问题。谢谢!
    猜你喜欢
    • 2014-11-09
    • 2021-10-23
    • 2016-01-27
    • 1970-01-01
    • 2011-06-22
    • 2014-12-04
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    相关资源
    最近更新 更多