人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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


use AnyDBM_File;
use DB_File;

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

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

●質問者: tomohirof
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:.DB Perl サーバ ファイル 作成
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● b-wind
●35ポイント

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

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

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

$ file xxxxxx.db

判定する事が出来ます。

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

◎質問者からの返答

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

ありがとうございます!

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


2 ● furutanian
●35ポイント

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 を利用する場合に使うものではありません。

◎質問者からの返答

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ