class DBM

要約

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

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

目次

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

継承しているメソッド

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

特異メソッド

new(dbname, mode = 0666, flags = nil) -> DBM[permalink][rdoc]

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

open(dbname, mode = 0666, flags = nil) -> DBM[permalink][rdoc]
open(dbname, mode = 0666, flags = nil) {|db| ... } -> ()

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

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

[PARAM] dbname:
データベース名
[PARAM] mode:
データベースのオープンモード
[PARAM] flags:
以下のいずれかを指定します。
DBM::READER

データベースの読み込みのみを行う

DBM::WRITER

データベースの新規作成はせず読み書きする

DBM::WRCREAT

データベースが存在しなければ新規作成して読み書きする

DBM::NEWDB

データベースを常に新規作成して既存のデータは破棄する

インスタンスメソッド

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

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

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

key をキーとして、value を格納します。 value として nil を指定すると、key に対する要素を削除します。

[PARAM] key:
キー。
[PARAM] value:
値。
clear -> self[permalink][rdoc]

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

close -> nil[permalink][rdoc]

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

closed? -> bool[permalink][rdoc]

DBM ファイルが既に閉じられているか調べます。

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

delete(key) -> String[permalink][rdoc]

key をキーとする要素を削除します。

[RETURN]
削除した要素の値を返します。
[EXCEPTION] DBMError:
要素の削除に失敗した場合に発生します。
reject! { |key, value| ... } -> self[permalink][rdoc]
delete_if { |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]

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

fetch(key, ifnone = nil) -> String[permalink][rdoc]

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

[PARAM] key:
キー。
[PARAM] ifnone:
キーが見つからなかった場合に返す値。
[EXCEPTION] IndexError:
ifnone を指定していないとき、キーが見つからなかった場合に発生します。
require 'dbm'

db1 = DBM.open('aaa.db', 0666, DBM::NEWDB)
db1[:a] = 'aaa'
db1[:b] = 'bbbbbb'
p db1.fetch('a')                     #=> 'aaa'
p db1.fetch('z', 'zzz')              #=> 'zzz'
p db1.fetch('z'){|key| [:key, key] } #=> [:key, 'z']
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 がデータベース中に存在する時、真を返します。

[PARAM] key:
キー。
has_value?(value) -> bool[permalink][rdoc]
value?(value) -> bool

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

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

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

invert -> Hash[permalink][rdoc]

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

require 'dbm'

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

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

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

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

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

length -> Integer[permalink][rdoc]
size -> Integer

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

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

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

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

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

と同じです。

[SEE_ALSO] Hash#reject

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

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

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

db1 = DBM.open('aaa.db', 0666, DBM::NEWDB)
db1[:a] = 'aaa'
db1[:b] = 'bbbbbb'
db2 = DBM.open('bbb.db', 0666, DBM::NEWDB)
db2[:bb] = 'bbb'
db2[:cc] = 'ccc'

p db1.keys #=> ['b', 'a']

db1.replace(db2)

p db1.keys #=> ['bb', 'cc']
p db2.keys #=> ['bb', 'cc']

hash = {'x' => 'xxx', 'y' => 'yyy' }
p db1               #=> #<DBM:0xb7c7eb08>
p db1.replace(hash) #=> #<DBM:0xb7c7eb08>
select {|key, value| ... } -> [Array][permalink][rdoc]

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

require 'dbm'

db1 = DBM.open('aaa.db', 0666, DBM::NEWDB)
db1[:a] = 'aaa'
db1[:b] = 'bbbbbb'

p db1.select {|key, value| key == 'a' } #=> [["a", "aaa"]]
shift -> String[permalink][rdoc]

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

store(key, value) -> String[permalink][rdoc]

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

[PARAM] key:
キー。
[PARAM] value:
値。

[SEE_ALSO] DBM#[]=

require 'dbm'

db1 = DBM.open('aaa.db', 0666, DBM::NEWDB)
p db1.store('c', 'ccc') #=> "ccc"
to_a -> [Array][permalink][rdoc]

キーと値のペアを配列に変換して返します。

require 'dbm'

db1 = DBM.open('aaa.db', 0666, DBM::NEWDB)
db1[:a] = 'aaa'
db1[:b] = 'bbbbbb'

p db1.to_a #=> [["b", "bbbbbb"], ["a", "aaa"]]
to_hash -> Hash[permalink][rdoc]

self をハッシュに変換して返します。

require 'dbm'

db1 = DBM.open('aaa.db', 0666, DBM::NEWDB)
db1[:a] = 'aaa'
db1[:b] = 'bbbbbb'
p db1.to_hash #=> {"a"=>"aaa", "b"=>"bbbbbb"}
update(other) {|key, value| ... } -> self[permalink][rdoc]

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

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

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

db1 = DBM.open('aaa.db', 0666, DBM::NEWDB)
db1[:a] = 'aaa'
db1[:b] = 'bbbbbb'
db2 = DBM.open('bbb.db', 0666, DBM::NEWDB)
db2[:bb] = 'bbb'
db2[:cc] = 'ccc'

db1.update(db2)
p db1.keys #=> ["bb", "cc", "b", "a"]
values -> [String][permalink][rdoc]

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

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

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

[PARAM] keys:
キー。複数指定可能です。
require 'dbm'

db1 = DBM.open('aaa.db', 0666, DBM::NEWDB)
db1[:a] = 'aaa'
db1[:b] = 'bbbbbb'

p db1.values_at('a', 'b') #=> ["aaa", "bbbbbb"]

定数

NEWDB -> Integer[permalink][rdoc]

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

[SEE_ALSO] DBM.open

READER -> Integer[permalink][rdoc]

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

[SEE_ALSO] DBM.open

VERSION -> String[permalink][rdoc]

libdbm のバージョンを表す文字列です。

DB_VERSION_STRING という定数が C 言語レベルで定義されていない場合は "unknown" になります。

WRCREAT -> Integer[permalink][rdoc]

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

[SEE_ALSO] DBM.open

WRITER -> Integer[permalink][rdoc]

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

[SEE_ALSO] DBM.open