class GDBM

要約

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

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

目次

特異メソッド
インスタンスメソッド
定数

継承しているメソッド

Enumerableから継承しているメソッド

特異メソッド

new(dbname, mode = 0666, flags = 0) -> GDBM[permalink][rdoc]

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

[PARAM] dbname:
データベースの名前を指定します。
[PARAM] mode:
省略値は 0666 です。mode として nil を指定するとデータベースが存在しない時には新たなデータベースを作らず nil を返します。
[PARAM] flags:
flags には、GDBM::FAST, GDBM::SYNC, GDBM::NOLOCK の論理和を指定します。デフォルト値は指定なし(つまり0)です。 flags に GDBM::READER, GDBM::WRITER, GDBM::WRCREAT, GDBM::NEWDB のいずれかを与えて読み書きのモードを指定できます。これらをどれも指定しなかった場合には、 GDBM::WRCREAT, GDBM::WRITER, GDBM::READER の順で試します。
open(dbname, mode = 0666, flags = 0) -> GDBM[permalink][rdoc]
open(dbname, mode = 0666, flags = 0) {|db| ... } -> object

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

ブロックを指定した場合、オープンした GDBM オブジェクトを引数にブロックを実行します。実行後 GDBM オブジェクトをクローズし、open メソッドはブロックの結果を返します。

[PARAM] dbname:
データベースの名前を指定します。
[PARAM] mode:
省略値は 0666 です。mode として nil を指定するとデータベースが存在しない時には新たなデータベースを作らず nil を返します。
[PARAM] flags:
flags には、GDBM::FAST, GDBM::SYNC, GDBM::NOLOCK の論理和を指定します。デフォルト値は指定なし(つまり0)です。 flags に GDBM::READER, GDBM::WRITER, GDBM::WRCREAT, GDBM::NEWDB のいずれかを与えて読み書きのモードを指定できます。これらをどれも指定しなかった場合には、 GDBM::WRCREAT, GDBM::WRITER, GDBM::READER の順で試します。
require 'gdbm'
GDBM.open("fruitstore.db") do |gdbm|
  gdbm.each_pair do |key, value|
    print "#{key}: #{value}\n"
  end
end

インスタンスメソッド

self[key] -> String[permalink][rdoc]

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

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

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

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

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

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

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

[SEE_ALSO] gdbm(3)

clear -> self[permalink][rdoc]

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

close -> nil[permalink][rdoc]

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

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

closed? -> bool[permalink][rdoc]

DBM ファイルが既に閉じられている場合は、真を返します。そうでない場合は、偽を返します。

delete(key) -> object | nil[permalink][rdoc]
delete(key) {|key| ... } -> object

与えられた key に対応する項目を削除します。

[PARAM] key:
キーを指定します。
[RETURN]
指定したキーが存在する場合は、キーに対応する値を返します。指定したキーが存在しない場合は、 nil を返します。また、キーが存在しない場合にブロックを与えている場合は、ブロックを評価した結果を返します。
require 'gdbm'
GDBM.open("a.db") do |db|
  db['a'] = "aaa"
  db['d'] = "ddd"
  db.delete("a") # => "aaa"
  db.delete("b") # => nil
  db.delete("c"){|k| "c is missing" } # => "c is missing"
  db.delete("d"){|k| "d is missing" } # => "ddd"
end
delete_if { |key, value| ... } -> self[permalink][rdoc]
reject! { |key, value| ... } -> self

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

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

each {|key, value| ... } -> self[permalink][rdoc]
each_pair {|key, value| ... } -> self

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

each_key {|key| ... } -> self[permalink][rdoc]

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

each_value {|value| ... } -> self[permalink][rdoc]

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

empty? -> bool[permalink][rdoc]

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

fastmode=(bool)[permalink][rdoc]

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

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

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

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

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

fetch(key, ifnone = nil) {|key| ... } -> object[permalink][rdoc]

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

[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[permalink][rdoc]
key?(key) -> bool
include?(key) -> bool
member?(key) -> bool

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

has_value?(value) -> bool[permalink][rdoc]
value?(value) -> bool

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

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

このメソッドは deprecated です。GDBM#key を使用してください。

invert -> Hash[permalink][rdoc]

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

require 'gdbm'

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

与えられた値に対応するキーを返します。

対応する要素が存在しない時には nil を返します。値に対応するキーが複数ある場合は最初に見つかったキーを返します。

[PARAM] value:
キーを探したい値を指定します。
keys -> [String][permalink][rdoc]

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

require 'gdbm'

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

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

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

reject {|key, value| ... } -> Hash[permalink][rdoc]

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

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

と同じです。

[SEE_ALSO] Hash#reject

reorganize -> self[permalink][rdoc]

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

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

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

replace(other) -> self[permalink][rdoc]

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]][permalink][rdoc]

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

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][permalink][rdoc]

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

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][permalink][rdoc]

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

[SEE_ALSO] GDBM#[]=

sync -> self[permalink][rdoc]

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

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

注意

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

syncmode=(bool)[permalink][rdoc]

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

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

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

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

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

to_a -> [[String]][permalink][rdoc]

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

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

to_hash -> Hash[permalink][rdoc]

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

update(other) -> self[permalink][rdoc]

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

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

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

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

values_at(*keys) -> [String][permalink][rdoc]

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

[PARAM] 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 -> Integer[permalink][rdoc]

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

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

NEWDB -> Integer[permalink][rdoc]

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

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

NOLOCK -> Integer[permalink][rdoc]

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

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

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

READER -> Integer[permalink][rdoc]

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

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

SYNC -> Integer[permalink][rdoc]

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

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

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

VERSION -> String[permalink][rdoc]

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

WRCREAT -> Integer[permalink][rdoc]

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

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

WRITER -> Integer[permalink][rdoc]

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

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