用于CSV :: open#<<的Ruby未定义方法`map'(NoMethodError)

Cur*_*ind 3 ruby csv

这有效但由于某种原因,逗号丢失了.data插入为

GAURISH SHARMA
97
69
69
975
PASS
Run Code Online (Sandbox Code Playgroud)

将每个值写在新行中.我想知道逗号在哪里?或者那些必须手动插入?


我正在尝试使用以下代码编写哈希值

CSV.open("resultdata.csv", "a") do |csv|    
  h.each do |key, value|
    csv << value
  end
end
Run Code Online (Sandbox Code Playgroud)

这是h哈希的内容

{:name=>"GAURISH SHARMA",
 :ca=>"97",
 :cb=>"69",
 :ba_lab=>"69",
 :bb_lab=>"69",
 :grand_total=>"975",
 :result=>"PASS"}
Run Code Online (Sandbox Code Playgroud)

此代码看起来正确,但在运行此代码时,会生成以下错误:

/home/gaurish/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/csv.rb:1729:in `<<': undefined method `map' for "GAURISH SHARMA":String (NoMethodError)
    from /home/gaurish/Dropbox/code/projects/ra/result.rb:35:in `block (2 levels) in <main>'
    from /home/gaurish/Dropbox/code/projects/ra/result.rb:34:in `each'
    from /home/gaurish/Dropbox/code/projects/ra/result.rb:34:in `block in <main>'
    from /home/gaurish/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/csv.rb:1354:in `open'
    from /home/gaurish/Dropbox/code/projects/ra/result.rb:33:in `<main>'
Run Code Online (Sandbox Code Playgroud)

知道这里有什么问题吗?

ste*_*lag 11

执行此操作时csv << value,您正在将字符串写入文件.CSV库可以将数组写入文件(以某种形式).从散列中获取包含所有值的数组的最佳方法是使用values方法btw.所以:

require 'csv'
h = {:name=>"GAURISH SHARMA",
 :ca=>"97",
 :cb=>"69",
 :ba_lab=>"69",
 :bb_lab=>"69",
 :grand_total=>"975",
 :result=>"PASS"}

CSV.open("resultdata.csv", "a") do |csv|    
  csv << h.values
end
Run Code Online (Sandbox Code Playgroud)

resultdata.csv看起来像

GAURISH SHARMA,97,69,69,69,975,PASS
Run Code Online (Sandbox Code Playgroud)


Luc*_*ira 10

放入value一个数组,如下所示:

CSV.open("resultdata.csv", "a") do |csv|    
  h.each do |key, value|
    csv << [value]
  end
end
Run Code Online (Sandbox Code Playgroud)

EDITED

每次使用csv << ["foo"]它都会在新行中插入"foo".但是如果你这样做,csv << ["foo", "foo", "foo"]你会在同一行中得到3个"foo",用逗号分隔.

知道这一点,首先尝试将所有值存储在数组中,然后使用csv << your_values_array.这将解决您的问题.