Perlで特定フォルダ内の全文検索
Windows7でファイル内の文字列を検索したかったのですが、インデックスを作成してみたりフォルダオプションで「ファイル名と内容を常に検索する」に設定してみたりしても、何故か全文検索になってくれませんでした。
専用の検索ツールをインストール…とも思ったけど、後々使えるかもしれないので全文検索ツールをPerlで書いてみた。
##################################################
#ファイル内検索プログラム
##################################################
use strict;
print '検索ワード:';
my $input = <STDIN>;
chop($input);
&search('./', $input);
<STDIN>;
exit;
### 全文検索
sub search {
my($dir, $word) = @_;
opendir(DIR, $dir);
my @dir = sort { $a cmp $b } readdir(DIR);
closedir(DIR);
foreach my $file (@dir) {
if ($file eq '.' or $file eq '..') {
next;
}
my $target = "$dir$file";
if (-d $target) {
&search("$target/", $word);
} else {
my $flag = 0;
open(FH, $target);
while (my $line = <FH>) {
if (index(lc($line), lc($word)) >= 0) {
$flag = 1;
}
}
close(FH);
if ($flag) {
print $target . "\n";
}
}
}
return;
}
search.pl
とかの名前でファイルを作成して、上の内容を書いておきます。あとはダブルクリックで実行すれば、検索文字を入力できる画面になるので、文字を入力してエンターキーを押します。検索対象は、search.pl
を置いたフォルダ内全てです。(PerlがインストールされたWindowsを想定。)
エラー処理が無かったり、文字コードの異なるファイルの検索を想定していなかったり…と色々問題はありますが、ちょろっと検索するくらいなら十分でした。
ただ、EmEditorがインストールされた環境なら「フォルダを右クリック → EmEditorでファイルから検索」を実行すれば全文検索ができると教えてもらったので、実は専用ソフトをインストールする必要も検索ツールを作る必要も無かったという…。_(。゚⊿ 」∠)_