perlのDBMファイルに関してお聞きします。


別のサーバで作成した「xxxxxx.db」というdbmのファイルを読み出したいの
ですが、DBMの種類が異なるのか読み出すことができません。


use AnyDBM_File;
use DB_File;

これらを使うのかと思ったりもしますが、使い方も良くわかりません。

具体的な使用方法も含めて、教えていただければ助かります。

回答の条件
  • 1人2回まで
  • 登録:2006/10/25 10:54:32
  • 終了:2006/11/01 10:55:03

回答(2件)

id:b-wind No.1

b-wind回答回数3344ベストアンサー獲得回数4402006/10/25 19:32:49

ポイント35pt

http://ja.wikipedia.org/wiki/DBM

DMB といってもいろいろ種類が有るので、どれかを判定するところから始めないといけません。

Linux 等でしたら file コマンドで

$ file xxxxxx.db

判定する事が出来ます。

http://www.linux.or.jp/JM/html/file/man1/file.1.html

id:tomohirof

返信送れて申し訳ありません。

ありがとうございます!

レンタルサーバの環境なので、コマンドは使えなそうです。でも再度確認してみます!

2006/10/31 08:03:52
id:furutanian No.2

furutanian回答回数112ベストアンサー獲得回数142006/10/26 12:01:16

ポイント35pt

DBM を読む場合、その種類に応じて、利用するライブラリを変えなくてはいけません。

#!/usr/bin/perl -w
# for Berkeley DB
use DB_File;
tie(%dbm,  'DB_File',   'xxxxxx.db',  1, 0644);
print "$key = $val\n" while(($key, $val) = each(%dbm));
untie(%dbm);
#!/usr/bin/perl -w
# for GNU dbm 1.x or ndbm
use GDBM_File;
tie(%gdbm, 'GDBM_File', 'xxxxxx.db', 1, 0644);
print "$key = $val\n" while(($key, $val) = each(%gdbm));
untie(%gdbm);
#!/usr/bin/perl -w
# for SDBM
use SDBM_File;
tie(%sdbm, 'SDBM_File', 'xxxxxx.db', 1, 0644);
print "$key = $val\n" while(($key, $val) = each(%sdbm));
untie(%sdbm);

上記の3つのうち、いずれかで読めないか試してみましょう。

なお、プラットフォームやバージョンに依存性がある(特に GDBM)場合があるので、その場合は変換が必要です。

相手が GDBM で Cygwin 環境の場合、convert-gdbm というスクリプトが利用できますが、そうでない場合、dumpgdbm, loadgdbm 等による変換が必要な場合もあります。

http://krabulator.free.fr/devel/dumpgdbm.html

また、そもそも移動先にすべての DBM ライブラリがあるかどうかという問題もあります(RedHat の場合、perl-DB_File というライブラリは初期状態では通常は入ってません)。移動元、移動先のプラットフォームの情報を(#1 の file コマンドの結果も)展開すると、より正確な情報をもらえるかもしれません。

なお、AnyDBM_File は、どの DBM でもいいから自前で DBM を作成して利用したい、という時に利用するもので、既存の DBM を利用する場合に使うものではありません。

id:tomohirof

詳しい説明ありがとうございます!

試しているのですが、なかなか上手くいっていません。私の作業方法自体が間違っているかもしれないので、もうすこし時間をかけてトライしてみます!!

2006/10/31 08:05:27

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

  • DBM の操作でハマった 別案件のお手伝い中で DBM を使ったんだけど、ハマったのでネタにしてみる。 今回やりたいのは、.dbm ファイルの内容を確認すること。システム(CGI)でそういう処理
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません