Like演算子とメタ文字
昨日まで、配列とコレクションの実験を幾つか行ってきた。
infoment.hatenablog.com
これらは、実務における以下の事例が切っ掛けだった。
- サーバー上のファイル群について、そのパスを載せたExcelファイルがある。
- パスは種別に細分類化されており、分類別シートに分かれて記載されている。
- キーワード(毎回違う)を含む文字列を抽出し、先頭シートに書き出したい。
上記は5年ほど前に作成したツールで、抽出方法はこんな感じだ。
- For Nextループで、各シートを検索する。
- 検索ワードでシート毎に、Findメソッドで虱潰しに探す。
- 探し出したパス(文字列)は、配列に都度拡張して格納。
この方法は一回の抽出に数分掛かる。そこで利用部門から先日受けた相談を機に、以下の方法に変更した。
- For Nextで各シートを巡回し、全データを根こそぎコレクションに格納する。
※Like演算子を用い、キーワードを含む場合のみ格納する。 - コレクションの内容を、配列に移植する。
- 配列を先頭シートに貼り付ける。
結果、数分かかっていたものが0.5秒で終わるようになった。
これは上手くいった!と思いきや、特定キーワードが上手く抽出できない。
調べてみると、
〇〇#◇◇◇
というコード体系で、上手くいかないことが分かった。理由は直ぐに判明。
「#」はLike演算子におけるメタ文字(プログラムで特定の意味を持たせた文字)であり、「0~9」の何れか1文字を表すらしい。
やむを得ず、都度「#」を「_」に置換することで、何とか抽出できるようになった(処理時間:0.5秒 ⇒ 2.0秒)。
このコード体系は、少なくとも20年近く前には既に使用されていたらしい。その頃に「メタ文字」があったか否かは、良くわからない。
当時の諸先輩に対し、今の状況と立場で配慮を求めるのは酷な話だ。ならばせめてこれを教訓とし、後輩の皆さんが苦労しないよう、最大限努力しようと思った。
※それ以前に、5年前のコード(自作)が酷すぎて、大いに恥じ入った次第です。
参考まで。