3

これは機能しますが、何らかの理由でコンマがありません。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>'

ここで何が悪いのか分かりますか?

4

3 に答える 3

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
于 2012-07-04T20:21:59.483 に答える
10

次のように、配列value内に配置します。

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

編集済み

使用csv << ["foo"]するたびに、新しい行に「foo」が挿入されます。しかし、csv << ["foo", "foo", "foo"]そうすると、コンマで区切られた同じ行に 3 つの「foo」が表示されます。

これを知って、最初にすべての値を配列内に格納してから、csv << your_values_array. これで問題は解決します。

于 2012-07-04T18:42:53.800 に答える
2

csv << valueやろうとしているのは、CSV に新しい行を追加 ( )する<<ことです。valueそのため、追加される行の列/フィールドに対応する配列内の各要素を持つ、文字列ではなく配列であることが期待されます。したがって、次のように動作するはずです。

CSV.open("resultdata.csv", "a") do |csv|    
  h.each do |key, value|
    csv << [value]
  end
end
于 2012-07-04T18:43:04.640 に答える