这可行,但由于某种原因,逗号丢失了。 data
作为
GAURISH SHARMA
97
69
69
975
PASS
将每个值写在新行中。我想知道逗号在哪里?或者那些必须手动插入?
我正在尝试使用以下代码编写哈希值
CSV.open("resultdata.csv", "a") do |csv|
h.each do |key, value|
csv << value
end
end
以下是h
哈希
{:name=>"GAURISH SHARMA",
:ca=>"97",
:cb=>"69",
:ba_lab=>"69",
:bb_lab=>"69",
:grand_total=>"975",
:result=>"PASS"}
此代码看起来正确但在运行此代码时,会生成以下错误:
/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>'
知道这里有什么问题吗?
答案 0 :(得分: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
resultdata.csv看起来像
GAURISH SHARMA,97,69,69,69,975,PASS
答案 1 :(得分:10)
将value
放入数组中,如下所示:
CSV.open("resultdata.csv", "a") do |csv|
h.each do |key, value|
csv << [value]
end
end
<强> EDITED 强>
每次使用csv << ["foo"]
时,它都会在新行中插入“foo”。但如果你做csv << ["foo", "foo", "foo"]
,你会在同一行得到3个“foo”,用逗号分隔。
知道这一点,首先尝试将所有值存储在数组中,然后使用csv << your_values_array
。这将解决您的问题。
答案 2 :(得分:2)
csv << value
尝试执行的操作是将新的行附加到<<
)到CSV上。因此,它期望value
是一个数组,而不是一个字符串,数组中的每个元素都对应于要追加的行的列/字段。因此,以下内容应该有效:
CSV.open("resultdata.csv", "a") do |csv|
h.each do |key, value|
csv << [value]
end
end