1

オブジェクトの配列から csv にオブジェクトの属性値を書き込む方法を知る必要があります。

例えば。

class Item
  attr_accessor :name, :weight, :price
end

def Item.create_item(name, weight, price)
  a = Item.new
  a.name = name
  a.weight = weight
  a.price = price
  return a
end

array_of_items = []

array_of_items << create_item(n1, w1, p1)
array_of_items << create_items(n2,w2,p2)
.....

次の目的の出力形式でcsvファイルを生成する必要があります

row0 - 名前、重量、価格

行 1 - n1、w1、p1

行 2 - n2、w2、p2

等々

上記の指示は役に立ちます。

編集:

フィードバックに基づいて、次のことを試しました。

class Item
  attr_accessor :name, :weight, :price

  def initialize(name, weight, price)
      @name, @weight, @price = name, weight, price
  end

  def to_s
    [@name, @weight, @price].join(', ')
  end
end

itemlist = []
itemlist << Item.new("Rice", 2, 40)
itemlist << Item.new("Wheat", 3, 80)

CSV.open("items.csv", "wb") do |csv|
 itemlist.each do |i|
  csv << i
 end
end

これにより、NoMethodError: undefined method `map' for Rice, 2, 40:Item というエラーがスローされます。

itemlist.class を確認すると、それは Array; です。itemlist[0].class はアイテムです - ここで驚きはありません。上記で定義された to_s インスタンス メソッドは、CSV に何かが追加されたときに印刷の問題を処理するはずだとおっしゃったと思いますが、それは機能していないようです。

4

2 に答える 2

0

以下のようにこれを行うことができます:

require "csv"

class Item
  attr_accessor :name, :weight, :price
end

def Item.create_item(name, weight, price)
  a = Item.new
  [a.name = name,a.weight = weight,a.price = price]
end

CSV.open("/home/kirti/ruby/csv/test.csv", "wb") do |csv|
  csv << ['name' , 'weight', 'price']
  csv << Item.create_item(:foo, 23, 11)
end

出力:

name,weight,price
foo,23,11
于 2013-09-09T07:34:09.843 に答える