ぼちぼち書くブログ

日記とかうまいもんとかパソコンのことをマイペースで記します。高知市に住んでいるので地元の情報も投稿します。

CSVデータ検索CGI(CGI KON)~ちょっと便利なCGIをカスタマイズして活用してみた

JANレコードの整理をして管理をしていますが、最初はExcel、次にAccessへと移行せざるを得ませんでした。レコード数が膨大になってきて、Excelでは取り扱えなくなった為です。(Excel 2003)

Accessは便利なのですが、マスターデータを他のスタッフに直接編集されると怖いので、参照専用で何か良い方法は無いものかな?と考えてみたところ、CSVデータとしてエクスポートして、それをWebアプリ(CGI)で検索出来ればいいんじゃないか?と考えた次第です。

【フリー】ファイル簡易検索(CSV用)

これがバッチリでした。Perl版を使わせて貰うことにしたのですが、PHP版もあるので自分の得意な言語版を使うと便利ですね。私は別にPerlが得意という訳ではなく、苦手なのでPerlでもPHPでも違いが無いので一般的なPerl版にした次第です(苦笑

設置は非常に簡単で、データCSVファイル、CGIプログラムと、Perlライブラリをサーバーにアップロードしてパーミッションを適切に設定するだけです。簡単に文字列検索出来ます。andで区切ると複数検索も出来ます。

ところが一つ不便なことに遭遇しました。

アルファベットの大文字と小文字を別物として扱う仕様だったのですね。うーん、商品の品番を検索することが多いから大文字でも小文字でもどっちもマッチさせて欲しいんだけどなー

Perlスクリプト(CGI)というところで、おそらく正規表現で処理していると判断しました。ハッキリ言って私はPerl分かりません。でも正規表現の場所くらいは見分けられます。調べてみるとそれらしいところが見つかりました。

sub Search_Pattern
{
	my($record,@pattern) = @_;

	foreach (@pattern) {
		return 0 if($record !~ /$_/);
	}

	return 1;
}

おそらくここだと目星を付けました。ハッキリいって意味不明ですが、

($record !~ /$_/)

という部分が正規表現のパターンマッチで比較しているっぽいです。

sub Search_Pattern
{
	my($record,@pattern) = @_;

	foreach (@pattern) {
		return 0 if($record !~ /(?i)$_/);
	}

	return 1;
}

ハッキリいって意味不明ですが、(?i)を付けて大文字小文字の区別をしなくしてみました。

結果オーライ!アルファベットの小文字でも大文字でも検索出来るようになりました。これで快適です。何万レコードでもCSVに吐き出してやれば簡単にWebブラウザで検索できます。ちなみにCSVファイルは文字コードEUCにしなくてはならないみたいです。