Perl入門   No.25


6.6 CGIを利用したデータ検索
 
最近ではUNIX上でコマンドラインからこのようなプログラムを書いて利用するというような人はまずいないでしょう。自分のデータ用だとWindows上で動くAccessというすぐれたデータベースソフトや、Excellでも代用出来ます。
 
しかし、データを様々な人と共有してネットワーク上で利用するといった場合や、インターネット上で何かのデータを検索システムを用いて提供するという場合は、Perlでこのようなスクリプトを書いて、CGIとして利用する方法がもっとも簡単です。
 
そこで、最後にCGI用の簡単なスクリプトを示しておきましょう。各自でいろいろと目的に応じてカスタマイズしてみてください。まさか自分のaddress.datをネットワークで公開する人はいないと思いますが、便宜上、上記と同じものをCGI用に変えてみます。
 
データを検索するのみ
 
検索文字列入力フォーム
 
search.html
<! search.html>
<html>
<head>
<title>address.html</title>
</head>
<body>
<FORM METHOD = "POST" ACTION="/cgi-bin/address.cgi">

<select name="field">
<option value="name">name
<option value="address">address
<option value="tel">tel
</select>

<input size="20" type="text" name="word">

<br><br>

<input type="submit" value="search">

</form>
</body>
</html>
 
 search.cgi
#!/usr/bin/perl

require "cgi-lib.pl";
require "jcode.pl";

&ReadParse;

 # search.cgi read from search.html

$field = $in{"field"};

$word = $in{"word"}
&jcode'convert(*word,"euc");

open(OUT,"address.dat");
while(<OUT>){
   if(/\"(.*)\",\"(.*)\",\"(.*)\"/){
     $name = $1;
     $address = $2;
     $tel = $3;

   if($field eq "name"){
    $field_1 = $name;
    }
   if($field eq "address"){
    $field_1 = $address;
   }
   if($field eq "tel"){
    $field_1 = $tel;
   }
  }

  if($field_1 =~ /$word/ ){
     print "$name\n";
     print "$address\n";
     print "$tel\n";
   }
  }
 close(OUT);
 
注:address.datの文字コードと検索文字列のコードは一致させてください。この例の場合は、両者ともeuc code を前提としています。もし、address.datをWindowsパソコンで作った場合は、nkf というプログラムでコード変換します。
 
実用的に自分が作ったものとしては、以下のようなデータベースが稼働しています。上のようなスクリプトに少し毛が生えただけのもので作っています。みんなもいろいろと工夫して実用的なものを作ってみてください。
 
国語教育関連論文目録
http://yoshi01.kokugo.edu.yamaguchi-u.ac.jp/kokugo/dbron/ronbun.html
 
万葉集検索システム
http://yoshi01.kokugo.edu.yamaguchi-u.ac.jp/manyou/man_ser_db.html