ファイル(特に見出し語)の構造をみて、正規表現での検索パターンを考えます。
この辞書の場合は、見出し語「テキスト」だったら、
こんなパターンで検索すると、該当見出しが見つからなかった場合は「な」行の先頭で終了します。
\x ^=*テ-?キ-?ス-?ト|^な
次、とらじさんの cp.def を使って「あ〜わ」行それぞれの見出し語開始位置のオフセット情報をリストにします。
以下、略。
あ d:\ref\iwa_koku.dic ->00000
か d:\ref\iwa_koku.dic ->CD6A0
さ d:\ref\iwa_koku.dic ->2289B0
辞書ファイルを開くさい、「た」行の冒頭に直接飛んでそこから検索を開始すれば、見出し語「テキスト」が「た」行内にあるかどうかがすぐにわかります。
わたしが使ってるのはこんなマクロです。
(このままでは他の環境では使えないので、ご注意)
以下、他の辞書の場合の検索パターン例。
======== iwakoku.def ======== by - aja -
* M
89 ^\ "iwakoku"
?.
&s
(mb==0)?.
mx[+,ps[=pw,mp[,ro[+, ; pw 0
; &d&t
#G
; #U
#F #e #<
c=cd, ; c0
&10 ; pa0 pr0
"\x ^=*"
:a #d(ct<=1)??{ "-?" >a }
#> &?("%s",pa) #m ; pa1
d+, ; d0
#O "d:\ref\iwa_koku.dic" &?("%s",pr) #m(r>0)?{ d-,} ; pr1 d1
#c(vr==1)? >y
(d)?#C ; d2 今回開いたのなら閉じる
&m("Not found")>z
:y ky-,
:z
ro],mp],ps],mx],
&d.
10: ; pa pr
(c<'ぁ')?{ &Sh(pa," ") &Sh(pr," ->000000"). }
(c<'か')?{ &Sh(pa,"|^か") &Sh(pr," ->000000"). }
(c<'さ')?{ &Sh(pa,"|^さ") &Sh(pr," ->CD6A0"). }
(c<'た')?{ &Sh(pa,"|^た") &Sh(pr," ->2289B0"). }
(c<'な')?{ &Sh(pa,"|^な") &Sh(pr," ->37EA01"). }
(c<'は')?{ &Sh(pa,"|^は") &Sh(pr," ->45E0A9"). }
(c<'ま')?{ &Sh(pa,"|^ま") &Sh(pr," ->4AB708"). }
(c<'や')?{ &Sh(pa,"|^や") &Sh(pr," ->591B68"). }
(c<'ら')?{ &Sh(pa,"|^ら") &Sh(pr," ->5F53AC"). }
(c<'わ')?{ &Sh(pa,"|^わ") &Sh(pr," ->62FC9F"). }
(c<'ァ')?{ &Sh(pa,"|^あ") &Sh(pr," ->666C6F"). }
(c<'カ')?{ &Sh(pa,"|^か") &Sh(pr," ->000000"). }
(c<'サ')?{ &Sh(pa,"|^さ") &Sh(pr," ->CD6A0"). }
(c<'タ')?{ &Sh(pa,"|^た") &Sh(pr," ->2289B0"). }
(c<'ナ')?{ &Sh(pa,"|^な") &Sh(pr," ->37EA01"). }
(c<'ハ')?{ &Sh(pa,"|^は") &Sh(pr," ->45E0A9"). }
(c<'マ')?{ &Sh(pa,"|^ま") &Sh(pr," ->4AB708"). }
(c<'ヤ')?{ &Sh(pa,"|^や") &Sh(pr," ->591B68"). }
(c<'ラ')?{ &Sh(pa,"|^ら") &Sh(pr," ->5F53AC"). }
(c<'ワ')?{ &Sh(pa,"|^わ") &Sh(pr," ->62FC9F"). }
(c<'・')?{ &Sh(pa,"|") &Sh(pr," ->CD6A0"). } ;・は実際は8398h
*
======== End of iwakoku.def ========
さらに高速化したい場合は、
\x ^-*テキスト|^な 新和英中辞典
\cx ^[+()]*text|^U1 新英和中辞典
\x ^=*テ・?キ・?ス・?ト|^な$ 広辞苑
・辞書ファイルを分割する。
・「てき」→「てく」内だけを検索するように検索範囲を細分化する。
・Emmett さんが HTJ.def でやってるみたいに、 vzlog vz.env のしくみを使って、検索開始位置のファイル・オープンを高速化する。
などの方法が考えられると思います。
[ NIFTY SERVE 「FGAL・ドキュメント」 フォーラム (FGALDC) 15 番会議室に投稿した記事 (2004/10/23) を改稿]