データベース


テキスト形式の簡単なデータベースファイルを作り、そのデータベースを効率よく利用する。 例として、ここでは雑誌の内容に関する情報をデータベースに登録したものを利用します。 Uniz userの記事の内容(カンマ区切りのデータベースファイル)

まず、単純に表への出力 Table

  == ソース ==
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD>\n<TITLE>",'7F蔵書記事一覧',"</TITLE>\n</HEAD>\n";
print "<BODY BGCOLOR=#FFFFFF>\n";
print "<H3>",'7F蔵書記事一覧',"</H3>\n<HR>\n";
$file="../magazine/uniuser.db";
open(FILE,$file);
print "<TABLE>\n<TR>Unix User</TR>\n<TABLE BORDER=2>\n";
$kan=""; 
while (<FILE>) {
  chop($_);
  next if ($_ eq ""); #go to next line
  @a=split(',',$_);
#  print @a,"\n<BR>";
  if ($a[1] eq $kan){
      print "<TR><TD></TD><TD>$a[2]</TD><TD>$a[3]</TD></TR>\n";
  }else{
      print "<TR><TD>$a[1]</TD><TD>$a[2]</TD><TD>$a[3]</TD></TR>\n";
      $kan=$a[1];
  }
}
print "</TABLE>\n</TABLE>\n";
close(FILE);
print "</BODY>\n</HTML>";
配列をうまく利用すれば、このようなデータベースを意図する形式に整形して表示することが可能ですね。

検索

検索文字

  == ソース ==
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD>\n<TITLE>",'7F雑誌記事の内容検索',"</TITLE>\n</HEAD>\n";
print "<BODY BGCOLOR=#FFFFFF>\n";
print "<H3>",'7F雑誌記事の内容検索',"</H3>\n<HR>\n";
#!/usr/bin/perl
require '../cgi-bin/jcode.pl';
if ($ENV{'REQUEST_METHOD'} eq "POST") {
    read(STDIN, $_, $ENV{'CONTENT_LENGTH'});
} else {
    $_=$ENV{'QUERY_STRING'};
}
($a,$_) = split('=',$_);
tr/+/ /;
s/%([\da-fA-F][\da-fA-F])/pack("C",hex($1))/eg;
&jcode'convert(*_,'euc');
$input=$_;
$file="../magazine/uniuser.db";
print "<H3>",'検索結果',"</H3>\n";
print "<B>",'検索文字: ',"$input </B>\n<BR>\n";
print "<TABLE BORDER=2>";
open(FILE,$file);
while (<FILE>) {
    chop;
    @a=split(',');
    $_=$a[2].$a[3];
    if (/$input/i) {   #大文字、小文字を同一視する i option
        print "<TR><TD>$a[1]</TD><TD>$a[2]</TD><TD>$a[3]</TD></TR>\n";
    }
}
print "</TABLE>\n";
close(FILE);
print "</BODY>\n</HTML>";
ここでは、日本語を含むファイルに対する検索を行うため漢字コードはEUCに統一しています。 (データベースファイル、プログラムファイル、検索対象文字列)
また、大文字小文字は同一視するオプションでの検索を行っています。

オプションにより大文字小文字の区別・同一視を選択可能にする、とか複数のキーワードのAND OR 検索が可能なものにするとより効率的ですね。


Unix Magazine と UNIX USER の記事情報からの検索

検索文字



最終更新 :
Yoshiro Yamamoto <yama@math.ems.okayama-u.ac.jp>