エントリー

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でファイルから検索」を実行すれば全文検索ができると教えてもらったので、実は専用ソフトをインストールする必要も検索ツールを作る必要も無かったという…。_(。゚⊿ 」∠)_

ページ移動

ユーティリティ

カテゴリー

検索

エントリー検索フォーム
キーワード

過去ログ

過去ログ表示フォーム
キーワード

Feed