解答例

  1. ファイルを読み込むループを作る。

    open("ra-order.csv", "r") do |raa|
      while line = raa.gets
        print line
      end
    end
    
  2. 上記のプログラムの print line の部分を、項目ごとに分解して printf するように変える。print line の行を以下のいずれかにする。

    if /(.*),(,*),(.*)/ =~ line then
      printf("%sさんが%sを注文しました。\n", $1, $2)
    end
    

    または

    id, item = line.split(/,\s*/)		# カンマで分割する
    printf("%sさんが%sを注文しました。\n", id, item)
    
  3. ヒントを参考に、 CSVをハッシュにするメソッドを利用し、上記の id と item の出力部分をハッシュ参照に変える。

    def csv2hash(file, default = nil)
      ra_hash = Hash.new(default)			# 空のハッシュを作る
      open(file, "r") do |f|
        while line = f.gets
          csv = line.chomp.split(/,\s*/)		# カンマで分割
          ra_hash[csv.shift] = csv
        end
      end
      ra_hash
    end
    menu = csv2hash("ra-menu.csv")
    sum = 0						# 合計売り上げ
    open("ra-order.csv", "r") do |raa|
      while line = raa.gets
        id, item = line.split(/,\s*/)		# カンマで分割する
        printf("%sさんが%sを注文しました。\n", id, menu[item][0])
        s += menu[item][1]
      end
    end
    printf("%s\n今日の売り上げは%d円でした。\n", "-"*66, sum)
    
  4. 同様に ra-member.csv をハッシュ化し、メンバID から名前に変換する部分を作ればよい。

本日の課題