ごとけんです

In message "[ruby-list:17834] instead of assoc method"
    on 99/10/19, Akihiro Yamauchi <aygoofy / kt.rim.or.jp> writes:

>ユーザーからの投票を配列votesにいれ、
>データのファイルが
>aaa,3
>ccc,2
>...
>といった単純なものだとして、
>ユーザーからの投票がデータにあれば投票数を1足して、データになければ新
>しいエントリーを作る、という感じのものです。

開催中の icon competition では、ファイルに保存する必要がある
ので、dbm を使ってます。dbmはハッシュのように使えるので便利
です。

メインの部分はこんな感じ: 

  require "dbm"
  DBNAME = "hoge"  # prefix of db file

  votes = ["aaa", "bbb"]

  db = DBM.open(DBNAME)
  begin
    db["aaa"] = 3
    db["ccc"] = 2

    votes.each do |v| 
      db[v] = "0" unless db.has_key?[v]  # 不要かも
      db[v] = (db[v].to_i + 1).to_s      # .to_s は不要かも
    end
  ensure
    db.close
  end

内容を表示するには、

  DBM.open("hoge").each{|k,v| p [k,v]}

などとします。実際は排他制御などもやってます。

dbmでなくHashとMarshalを組み合わせるという手もあるでしょう。

-- gotoken