2017年11月16日木曜日

【小ネタ】INDEX関数 vs FIND関数




以下のプログラムをご覧ください。

  Y1 = index( trimn(X), "SAS");
  Y2 = find( trimn(X), "SAS" );


どちらも、変数X に "SAS" という文字が何バイト目にあるかを取得しています。
(なんでTRIMN関数も使ってるの?という疑問は、最後に注意点として解説しています。ちなみに今回の例ではTRIMN関数なしでも問題なし)



この2つの関数の違いですが、FIND関数は、INDEX関数の進化版というイメージです。
(FIND関数には第3引数と第4引数があり、これらの引数を使うとちょっと便利)


たとえば、
変数X から大文字・小文字区別せずに "SAS" という文字が何バイト目にあるかを取得したいとします。
この場合、FIND関数では、第3引数に "i" を指定すると大文字・小文字区別せずに検索してくれます。

  Y2 = find( trimn(X), "SAS", "i" );



INDEX関数が使われがちだけど、FIND関数の方もレパートリーに加えてあげて下さい。
(「INDEX」は5文字タイピングしないといけないけど、「FIND」は4文字で済んで、ちょっとだけ楽だし)



注意点

  • 日本語などのマルチバイト文字を含む場合は、以下記事の通りうまく動作しないのでご注意ください
  • 以下で解説している通り、場合によって「TRIMN関数」を併用する必要があります。
    • 文字値の末尾にある空白問題
    • 上記リンク記事で解説している通り、変数値の長さがLENGTHより短い場合、末尾に半角スペースが入るので、想定外の結果を返す場合があります。

0 件のコメント:

コメントを投稿