※リストの検索としてよく使われる関数に、@Containsと@IsMemberがある。
だが、これらの使い方を誤ると正しい結果を得られず、動作不正になってしまうことがある。
下の二つのボタンは、いずれもLISTという変数の中を検索するサンプルプログラムである。
しかし、実行してみると結果は違うことになっている。
(上が「あります。」で、下が「ありません。」になる)
これはどういうことかと言うと、@Contains関数と@IsMember関数の検索手法の違いにある。
@Contains関数は、リストの中に検索条件で指定した文字列が含まれていれば一致とするのに対して、
@IsMember関数はリストの各要素が検索条件で指定した文字列と完全に一致していれば一致とするのである。
つまり、@Containsでは、"ABCDEFG"や"ABCD"の中に"ABC"が含まれるので、検索に一致しているが
@IsMemberでは、"ABC"というリストの要素がないために、検索に一致するものはないとしているのである。
※ロールの判定に@Contains関数を使うことがあるが、似たようなロール名にしているとエラーになることがあるので注意が必要である。
(実際には、[ロール名]で判断されるのでエラーにはなり得ないが、本来の判定方法からすれば、@IsMemberが正しいと言えるだろう)
@Containsの場合
LIST := "ABCDEFG":"DEF":"GHI":"ABCD";
@If(@Contains(LIST;"ABC");@Prompt([OK];"検索結果";"あります。");@Prompt([OK];"検索結果";"ありません。"))
@IsMemberの場合
LIST := "ABCDEFG":"DEF":"GHI":"ABCD";
@If(@IsMember(LIST;"ABC");@Prompt([OK];"検索結果";"あります。");@Prompt([OK];"検索結果";"ありません。"))
2008年5月13日火曜日
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿