たつをの ChangeLog : 2013-08-01

Perl の標準モジュール Search::Dict は、ソート済みのテキストファイルを対象に、二分探索でキーワードと各行の前方一致を調べ、マッチした行を取り出すという、高速検索モジュールです。インデックスの作成は不要。詳しくは、 perldoc Search::Dict で! ソースを見比べてはないけど仕組みはUNIX系コマンドの look と同じかと。

で、さっそくサンプルプログラム。

searchdict.pl
#!/usr/bin/perl
use strict;
use warnings;
use Search::Dict;

my ($key, $fn) = @ARGV;
open(my $fh, "<", $fn) or die;
look $fh, $key;
my $line = readline($fh);
while ($line =~ /^\Q$key\E/) {
     print $line;
     $line = readline($fh);
}
close($fh);
(Search/Dict.pm のコードによれば、複数マッチの場合、辞書順的に先頭のものが返される仕様なので、複数結果のときの取り出し方はこれで良いはず。)

検索対象テキストファイルのサンプル(sample.txt):
12345
456789
abc
abx
abyz
あい
あいあい
あいたた
わお
わおん

実行例:
% ./searchdict.pl 'ab' sample.txt
abc
abx
abyz
% ./searchdict.pl 'あい' sample.txt
あい
あいあい
あいたた

参考までに look コマンドでの実行例:
% look 'ab' sample.txt
abc
abx
abyz
% look 'あい' sample.txt
あい
あいあい
あいたた

参考記事


- lookコマンドによる二分探索が速すぎて見えない - Yuta.Kikuchiの日記
http://d.hatena.ne.jp/yutakikuchi/20121029/1351467398

今日ランチで食べた爆速復興弁当は「宮城の和牛 すき焼き弁当」でした。現段階では一般販売前のプロトタイプ。一ヶ月半くらいかけてじっくり開発を進めてきたものだそうで、今日の試験販売を経てまた進化するみたい。

爆速復興すき焼き弁当

最大のポイントは、宮城の和牛のみを使ったスキヤキ。やわらかくてジューシーです、これ。あと、副菜の昆布巻き煮物、青菜の漬物もおいしい! ただ全体的に味が濃いめではあります。ビールが飲みたくなる系です。お昼だったら濃い緑茶かなあ。そうそう、お米も普通に美味しいです。宮城の「ひとめぼれ」だそうです。

爆速復興すき焼き弁当(箱、仮)

これは人気出ると思いますよー。

復興弁当記事

- 石巻爆速復興弁当(さば味噌煮)がうまい![2012-09-06-1]
- 石巻爆速復興弁当(さんま天丼)もうまい![2012-09-20-1]
- 石巻爆速復興弁当(ほたてご飯)もうまい![2012-09-27-6]
- 石巻爆速復興弁当(さんまとほたての蒲焼)もうまい![2012-10-18-2]
- 石巻爆速復興弁当(彩りあなごめし)もうまい![2012-11-15-4]
- 石巻爆速復興弁当(ぶり大根とわかめご飯)もうまい![2012-12-20-1]
- NEXCO東日本とYahoo! JAPANがコラボした新弁当「どら弁・三陸彩り 金華ぎん 鮭弁当」[2013-01-24-3]
- 小田急とYahoo! JAPANがコラボした東北復興弁当「菜・彩・鶏三昧」[2013-06-13-4]
この記事に言及しているこのブログ内の記事

たつをの ChangeLog
Powered by chalow