IDLの掟|文字列部分一致検索の実装

IDL

本ページに足を運んでくださり、ありがとうございます。

今回は「IDLの掟 ー文字列部分一致検索ー」です。

内容は以下の通りです。

それでは、早速参りましょう。

文字列部分一致検索の目的

文字列部分一致検索の目的は、

いくつかの要素で構成されている文字列配列の中から、特定の文字列を含む要素だけを配列から抽出すること
です。

いくつかの要素で構成されている文字列配列のなかで、特定の文字列だけ含む要素だけを配列から抽出したと思ったことはありませんか?

僕はよくあります。例えば、特定の日時を文字列として含むファイル名を抽出したいとき、特定の高度を文字列として含むファイル名を抽出したいとき、などなど。

IDLは配列処理が得意な言語なので、その強みは活かしてなんぼだと思います。

次に、文字列部分一致検索に必要な関数を紹介します。

使う関数と文法

使う関数は以下の2つです。以下の2つはIDLをインストールすればデフォルトでインストールされている関数です。

  • where() -> where(条件式) | 条件式に合う配列の要素番号を返す関数
  • strmatch() -> strmatch(文字列配列, 検索文字列) | 文字列配列の各要素に検索文字列が含まれていたら1を返す関数
文字列部分一致検索の文法は以下の通りです。
arrを文字列配列、keywordを検索文字列とすると、
文法 | arr[where(strmatch(arr, “keyword”) eq 1)]

実装

それでは実際に手を動かしながら練習してみましょう。IDLを起動してください。IDLを起動したら以下のソースコードの1行目・2行目・4行目をIDLコンソールに1行ずつ入力してみてください。

1行目:
適当な文字列配列を作成する
2行目:
“dog”という文字列のみを出力させる
3行目:
コメントアウトしてあるが、予想出力結果
4行目:
“dog” “dish” “dawn”という”d”から始まる文字列すべてを出力させる
5行目:
コメントアウトしてあるが、予想出力結果
ここで察しの良い方は気づいたかと思いますが、上記2つの命令の違いは?*の違いだけです。
?は、特定の文字数を検索したい場合に使います。
*は、文字数に制限なく検索したい場合に使います。

まとめ

最後に、文字列部分一致検索のおさらいして終わりにしましょう。

文法 | arr[where(strmatch(arr, “keyword”) eq 1)]

?は、特定の文字数を検索したい場合に使う。

*は、文字数に制限なく検索したい場合に使う。


この記事が何かのお役に立てれば、嬉しいです。

最後までお読みいただき、ありがとうございました。

 

コメント