[ トップページ ]

« Perl による Web ページへのラジオボタン円形配置 | メイン | Perl による簡易 XML インタフェース ― テーブル型データ表現のハッシュと XML 間の変換 »

データベース

テキストからの Perl データベース (tie) 生成

関係データベースのような本格的なデータベースのかわりに Perl の tie() をつかうと,簡易データベースを容易にあつかうことができる. つまり,tie() をつかうことによって Perl のハッシュを外部ファイルとむすびつけて,恒久的 (permanent) なものにすることができる. ただし,本格的なデータベースとはちがって並列にかきこんだりすることはできないし,性能もひくいとかんがえられる. したがって,プロトタイプには適するが実用には適さない.

一方,かんたんなデータベースのようなデータ群あるいはデータベースに登録するべきデータ群をつくるとき,Excel がよくつかわれる. そこで,Excel などでつくったデータを,たとえばタブくぎりのテキストとして出力して,それを Perl のデータベースにとりこみたくなる. そういうプログラムの例をしめす.

以下のプログラムでは,タブなどの空白文字でくぎられた 4 つのフィールドからなるレコードのならびを入力して,それを簡易データベースに登録する. このデータベースにおいては 4 つのフィールドのうちの最初のものをキーとして,あとの 3 つのフィールドを検索することができる. キーは一意でなければならない (一意性はここでは検査していない).




############################################################################
#
#	Text to DBM converter
#
############################################################################

use strict 'subs';
use strict 'refs';

use SDBM_File;

use Fcntl;

my $FileName = "C:\DB_File";

sub error($) {
    my ($message) = @_;
    print STDERR "Error: $message\n";
}


my %db;

tie(%db, 'SDBM_File', $FileName, O_RDWR | O_CREAT, 0666) ||
    error("Can't open database file!");

%db = ();

$| = 1;
print "Input file name: ";
my $file = <>;
chomp $file;
open(INPUT, $file);
while (<INPUT>) {
    if (/^(\w+)\s+(\w+)\s+(\w+)\s+(\w+)/) {
	my $A = $1;
	my $B = $2;
	my $C = $3;
	my $D = $4;
	print "A=${A} B=${B} C=${C} D=${D}\n";
	$db{A} = "${B}\t${C}\t${D}";
    } else {
	error("Syntax error: $_");
    };
};

untie(%db);

1;
Keywords:

トラックバック

このエントリーのトラックバックURL:
https://www.kanadas.com/mt/mt-tb.cgi/1628

コメントを投稿

bulb403_7501-1.jpg

螺旋 3D 印刷技術を使用してつくったこのような「3D デザインランプ」を 3d-dl.com で売っています.

このページについて

2007-11-14 20:51 に投稿されたエントリーのページです。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Creative Commons License
このブログは、次のライセンスで保護されています。 クリエイティブ・コモンズ・ライセンス.
Powered by Movable Type