Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > gdbmライブラリ > GDBMクラス

class GDBM

クラスの継承リスト: GDBM < Enumerable < Object < Kernel < BasicObject

Abstract

GDBM ファイルをアクセスするクラス。

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

特異メソッド

new(dbname, mode = 0666, flags = 0) -> GDBM
open(dbname, mode = 0666, flags = 0) -> GDBM
open(dbname, mode = 0666, flags = 0) {|db| ... } -> ()

dbname で指定したデータベースをモードを mode に設定してオープンします。

mode の省略値は 0666 です。mode として nil を指定 するとデータベースが存在しない時には新たなデータベースを作らず nil を返します。

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

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] -> String

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

[PARAM] key:
キー。
self[key] = value

key をキーとして、value を格納します。

[PARAM] key:
キー。
[PARAM] value:
格納する値。
cachesize=(size)

内部のキャッシュのサイズを指定します。

詳しくは gdbm の GDBM_CACHESIZE の項を参照ください。

[PARAM] size:
新しい内部のキャッシュサイズ。

[SEE_ALSO] gdbm

clear -> self

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

close -> nil

DBM ファイルをクローズします。

以後の操作は例外 RuntimeError を発生させます。

closed? -> bool

DBM ファイルが既に閉じられているかどうかを返します。

既に閉じられていれば true を返します。 そうでなければ false を返します。

delete(key) -> nil
delete(key) {|key| ... } -> ()

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

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

delete_if { |key, value| ... } -> self
reject! { |key, value| ... } -> self

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

このメソッドは self を破壊的に変更します。

each {|key, value| ... } -> self
each_pair {|key, value| ... } -> self

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

each_key {|key| ... } -> self

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

each_value {|value| ... } -> self

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

empty? -> bool

データベースが空の時、真を返します。

fastmode=(bool) -> bool

オープンしている GDBM オブジェクトのモードを変更します。

このオプションはデフォルトで on です。 このオプションは obsolete です。

このオプションが on のときは、GDBM はディスクへの書き込みを待たずに 次の操作を続けます。

[PARAM] bool:
新たにセットするモード。

[SEE_ALSO] GDBM::FAST, GDBM#syncmode=

fetch(key, ifnone = nil) {|key| ... } -> object

データベースから対応するキーを探してその要素の値を返します。

[PARAM] key:
探索するキー。
[PARAM] ifnone:
対応するキーが見つからなかった場合に返す値。
[EXCEPTION] IndexError:
ifnone が設定されていないときに、対応するキーが 見つからなかった場合に発生します。
require 'gdbm'

db1 = GDBM.open('aaa.gdbm', 0666, GDBM::NEWDB)
db1['a'] = 'aaa'
db1['b'] = 'bbb'

p db1.fetch('a')                            #=> 'aaa'
p db1.fetch('z', 'zzz')                     #=> 'zzz'
p db1.fetch('z'){|key| [:key, key] }        #=> [:key, 'z']
p db1.fetch('z', 'zzz'){|key| [:key, key] } #=> 'zzz'
p db1.fetch('z')                            #=> IndexError 発生

[SEE_ALSO] Hash#fetch

has_key?(key) -> bool
key?(key) -> bool
include?(key) -> bool
member?(key) -> bool

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

has_value?(value) -> bool
value?(value) -> bool

value を値とする要素がデータベース中に存在する時、真を返します。

[PARAM] value:
検索したい値。
index(val) -> String

値 val に対応するキーを返します。

対応する要素が存在しない時には nil を返します。 該当するキーが複数存在する場合、どのキーを返すかは不定です。

[SEE_ALSO] Hash#index

invert -> Hash

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

require 'gdbm'

db1 = GDBM.open('aaa.gdbm', 0666, GDBM::NEWDB)
db1['a'] = 'aaa'
db1['b'] = 'bbb'
p db1.invert #=> {"aaa"=>"a", "bbb"=>"b"}
keys -> [String]

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

require 'gdbm'

db1 = GDBM.open('aaa.gdbm', 0666, GDBM::NEWDB)
db1['a'] = 'aaa'
db1['b'] = 'bbb'
p db1.keys #=> ["a", "b"]
length -> Integer
size -> Integer

データベース中の要素の数を返します。

現在の実現では要素数を数えるためにデータベースを全部検索します。

reject {|key, value| ... } -> Hash

ブロックを評価した値が真であれば該当する要素を削除します。

self.to_hash.reject{|key, value| ... }

と同じです。

[SEE_ALSO] Hash#reject

reorganize -> self

DB ファイルの再編成を行います。

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

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

replace(other) -> self

self の内容を other の内容で置き換えます。

[PARAM] other:
each_pair メソッドを持つオブジェクトでなければなりません。
require 'gdbm'

db1 = GDBM.open('aaa.gdbm', 0666, GDBM::NEWDB)
db1['a'] = 'aaa'
db1['b'] = 'bbb'
db2 = GDBM.open('bbb.gdbm', 0666, GDBM::NEWDB)
db2['c'] = 'ccc'
db2['d'] = 'ddd'
hash = { 'x' => 'xxx', 'y' => 'yyy'}

p db1               #=> #<GDBM:0xb7d1c8a8>
p db1.replace(db2)  #=> #<GDBM:0xb7d1c8a8>
p db1.replace(hash) #=> #<GDBM:0xb7d1c8a8>
select {|key, value| ... } -> [[String]]

ブロックを評価して真になった要素のみを配列に格納して返します。

require 'gdbm'

db1 = GDBM.open('aaa.gdbm', 0666, GDBM::NEWDB)
db1['a'] = 'aaa'
db1['b'] = 'bbb'
db1['c'] = 'ccc'

p db1.select{ |key, value| key == 'a' } #=> [["a", "aaa"]]
p db1.select{ |key, value| key != 'a' } #=> [["c", "ccc"], ["b", "bbb"]]

[SEE_ALSO] Hash#select

shift -> [String]

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

require 'gdbm'

db1 = GDBM.open('aaa.gdbm', 0666, GDBM::NEWDB)
db1['a'] = 'aaa'
db1['b'] = 'bbb'

p db1.shift #=> ["a", "aaa"]
store(key, val) -> [String]

key に対して val を格納します。

[SEE_ALSO] [[m#GDBM#[]=]]

sync -> self

要素の変更をファイルに反映します。

FAST モード([[m#GDBM#open]] の第3引数に [[m#GDBM::FAST]] を指定)のときだけ意味があります。

注意

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

syncmode=(bool) -> bool

オープンしている GDBM オブジェクトのモードを変更します。

このオプションはデフォルトで off です。

このオプションが on のときは、GDBM はデータベースの変更操作ごとに データベースの状態を同期します。

[PARAM] bool:
新たにセットするモード。

[SEE_ALSO] GDBM::SYNC, GDBM#fastmode=

to_a -> [[String]]

self の各要素を格納した配列を返します。

返される配列の1つの要素は [key, value] です。 つまり配列の配列を返します。

to_hash -> Hash

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

update(other) -> self

self と other の内容をマージします。

重複するキーに対応する値はother の内容で上書きされます。

[PARAM] other:
each_pair メソッドを持つオブジェクトでなければなりません。
values -> [String]

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

values_at(*keys) -> [String]

keys に対応する値を配列に格納して返します。

[UNKNOWN_META_INFO] @params:
keys キー。複数指定可能です。
require 'gdbm'

db1 = GDBM.open('aaa.gdbm', 0666, GDBM::NEWDB)
db1['a'] = 'aaa'
db1['b'] = 'bbb'
db1['c'] = 'ccc'

p db1.values_at('a', 'b') #=> ["aaa", "bbb"]
p db1.values_at('x', 'y') #=> [nil, nil]

定数

FAST

GDBM.open の第3引数に指定します。

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

NEWDB

GDBM.open の第3引数に指定します。

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

NOLOCK

GDBM.open の第3引数に指定します。

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

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

READER

GDBM.open の第3引数に指定します。

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

SYNC

GDBM.open の第3引数に指定します。

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

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

VERSION

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

WRCREAT

GDBM.open の第3引数に指定します。

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

WRITER

GDBM.open の第3引数に指定します。

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

Methods

Classes