# GDBM

GDBMファイルをアクセスするクラス．キー，データともに文字列でなければな らないという制限と，データがファイルに保存されるという点を除いては Hashクラスと全く同様に扱うことがでます．

## スーパークラス:

- Object

## インクルードしているモジュール:

- Enumerable

## クラスメソッド:

`new(dbname[, mode[, flags]])`
`open(dbname[, mode[, flags]])`
`open(dbname[, mode[, flags]]) {|db| ...}`

  dbnameで指定したデータベースをモードを modeに設定してオープンします．modeの省 略値は0666です．modeとして`nil`を指定 するとデータベースが存在しない時には新たなデータベースを作らず `nil`を返します．

  flags には，GDBM::FAST, GDBM::SYNC, GDBM::NOLOCK を の論理和を指定します．デフォルト値は指定なし(つまり0)です．

  Ruby 1.8.2 以降では、flags に GDBM::READER, GDBM::WRITER, GDBM::WRCREAT, GDBM::NEWDB のどれかを与えて読み書きのモードを指定できます。 これらをどれも指定しなかった場合には、 GDBM::WRCREAT, GDBM::WRITER, GDBM::READER の順で試します。

  ブロックを指定した場合，オープンしたGDBMオブジェクトを 引数にブロックを実行します．実行後GDBMオブジェクトをクローズ し，openメソッドはブロックの結果を返します．これはちょうど 以下と同じです．

      dbm = GDBM.open(file)
      begin
        yield dbm
      ensure
        dbm.close
      end

## メソッド:

`self[key]`

  keyをキーとする値を返します．

`self[key]=value`

  keyをキーとして，valueを格納します．

`cachesize = size`
`clear`

  DBMファイルを空にします．

`close`

  DBMファイルをクローズします．以後の操作は例外を発生させます．

`delete(key)`
`delete(key) {|key| ... }`

  keyをキーとする項目を削除します．

  指定したキーが存在しなければnilを返します，このとき ブロックを指定していれば，ブロックを評価します．

`delete_if { |key, value| ... }`
`reject! { |key, value| ... }`

  ブロックを評価した値が真であれば該当する項目を削除します．

`each {|key, value| ... }`
`each_pair {|key, value| ... }`

  各要素に対するイテレータ．

`each_key {|key| ... }`

  全てのkeyに対して繰り返すイテレータ．

`each_value {|value| ... }`

  全てのvalueに対して繰り返すイテレータ．

`empty?`

  データベースが空の時，真を返します．

`fastmode = bool`
`syncmode = bool`

  オープンしているGDBMオブジェクトのモードを変更します．下記の定数 GDBM::FAST、GDBM::SYNC を参照してください．

`fetch(key[,ifnone])`
`fetch(key) {|key| ... }`

  ハッシュと同じ

`has_key?(key)`
`key?(key)`
`include?(key)`
`member?(key)`

  keyがデータベース中に存在する時，真を返します．

`has_value?(key)`
`value?(value)`

  valueを値とする組がデータベース中に存在する時，真を返します．

`index(val)`

  ハッシュと同じ

`indexes(key_1, ... ) ((<obsolete>))`
`indices(key_1, ... ) ((<obsolete>))`

  各引数の値をキーとする要素を含む配列を返します．

`invert`

  値からキーへのハッシュを返します．

`keys`

  データベース中に存在するキー全てを含む配列を返します．

`length`
`size`

  データベース中の要素の数を返します．(注意:現在の実現では要素数を数 えるためにデータベースを全部検索します)

`reject {|key, value| ... }`

  self.to_hash.reject と同じです．ハッシュを返します．

`reorganize`

  GDBMでは，要素の削除を行ってもDBファイルのサイズは減少しません(削 除によって空いた領域は次の格納のために取っておかれます、)．このメ ソッドを呼び出すことでDBMファイルを新規に作り直し無駄な領域をなく すことができます．

  大量の削除を行ったときに，ディスクスペースの節約のために使用します．

`replace(other)`

  DBMの内容を other の内容で置き換えます． other は each_pair メソッドを持つオブジェクトで なければなりません．

`shift`

  データベース中の要素を一つ取り出し，データベースから削除します．

`store(key, val)`

  self[key]=val と同じです．keyに対してvalを格納します．

`sync`

  要素の変更をファイルに反映します．FASTモード (GDBM#open() の第3引数にGDBM::FAST を指定)のときだけ意味があります．

  注) GNU gdbm version 1.8 以降よりFASTモードがデフォルトになりました．

`to_a`

  DBMの各要素を格納した配列を返します．返される配列の1つの要素は [key, val] です．(つまり配列の配列を返します)．

`to_hash`

  DBMの各要素を格納したハッシュを返します．

`update(other)`

  DBMとotherの内容をマージします．重複するキーに対応する値は otherの内容で上書きされます．

  otherは each_pair メソッドを持つオブジェクトでなければなりま せん．

`values`

  データベース中に存在する値全てを含む配列を返します．

## 定数

`GDBM::VERSION`

  libgdbm のバージョン情報の文字列です．

以下の定数は open の第3引数に指定します．

`GDBM::FAST`

  書き込みの結果が，ディスク上のファイルにすぐに反映しなくなります． このモードのときに結果を明示的にファイルに反映させるには GDBM#sync メソッドを呼びます．libgdbm version 1.8.0 以降ではこのモードがデフォルト です．

`GDBM::SYNC`

  書き込みの結果が，ディスク上のファイルにすぐに反映されます． libgdbm version 1.8.0 以前のデフォルトモードです．

  この定数は libgdbm version 1.8.0 以降より有効です

`GDBM::NOLOCK`

  通常，他のプロセスがDBをオープンしている最中にオープンを行うと Errno::EWOULDBLOCK(またはErrno::EAGAIN)例外が発生します．このフラグを 指定していれば，他のプロセスがオープンしている最中でも同時オープンする ことができます．

  この定数は libgdbm version 1.8.0 以降より有効です．

`GDBM::READER ((<ruby 1.8.2 feature>))`

  読み込みモードでオープンします．

`GDBM::WRITER ((<ruby 1.8.2 feature>))`

  書き込みモードでオープンします．

`GDBM::WRCREAT ((<ruby 1.8.2 feature>))`

  書き込みモードで、すでにファイルが存在しなかったら作ります．

`GDBM::NEWDB ((<ruby 1.8.2 feature>))`

  書き込みモードで、すでにファイルが存在したら削除してから作り直します．

links: [Enumerable] [Hash] [Object]
reverse links: [1.6.8から1.8.0への変更点(まとめ)] [ruby 1.7 feature] [添付ライブラリ]