Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

$LISTFIND

値を要求して指定した list を検索します。

Synopsis

$LISTFIND(list,value,startafter)
$LF(list,value,startafter)

パラメータ

list 有効なリストに評価する式。list は、複数の要素を含むエンコードされた文字列です。list は $LISTBUILD または $LISTFROMSTRING を使用して作成されるか、あるいは $LIST を使用して別のリストから抽出されなければなりません。
value 対象の要素値を含む式。
startafter オプション — リスト位置として翻訳される整数式。検索はこの位置の後の要素から開始されるため、0 は位置 1 から開始することを意味し、1 は位置 2 から開始することを意味します。startafter=-1 は有効な値ですが、常に一致なしが返されます。startafter 値の整数部分のみが使用されます。

概要

$LISTFIND は、指定された list で、要求された value の最初のインスタンスを検索します。一致は完全で、すべての要素値が含まれる必要があります。文字比較では大文字と小文字が区別されます。数字はキャノニック形式で比較されます。完全一致が見つかると、$LISTFIND は一致する要素の位置を返します。value が見つからなければ、$LISTFIND は 0 を返します。

検索は、startafter パラメータで示された位置の次の要素から開始されます。startafter パラメータを省略すると、$LISTFINDstartafter 値を 0 と見なし、先頭要素 (要素 1) から検索を開始します。

一致が見つからない場合、$LISTFIND は 0 を返します。startafter パラメータが存在しないリスト・メンバを参照する場合も、$LISTFIND は同様に 0 を返します。

$LISTVALID 関数を使用すると、list が有効なリストかどうかを判定できます。list が有効なリストでない場合、システムは <LIST> エラーを生成します。

startafter パラメータの値が -1 未満の場合、$LISTFIND 関数を呼び出すと <RANGE> エラーが発生します。

空の文字列および空のリスト

以下の例のように、$LISTFIND 関数を使用して、空の文字列値を検索できます。

   SET x=$LISTBUILD("A","","C","D")
   WRITE $LISTFIND(x,"")   ; returns 2

$LISTFIND を省略された要素を含むリストと共に使用することはできますが、省略された要素の検索には使用できません。以下の例では、省略された要素を含むリスト内の値を見つけます。

   SET x=$LISTBUILD("A",,"C","D")
  WRITE $LISTFIND(x,"C")   ; returns 3

以下の $LISTFIND の例は 1 を返します。

  WRITE $LISTFIND($LB(""),"")   ; returns 1

以下の $LISTFIND の例は 0 を返します。

  WRITE $LISTFIND("",""),!     ; returns 0
  WRITE $LISTFIND($LB(),""),!  ; returns 0

以下の list 例は、データを含むリストに連結された空のリストで構成されています。空のリストを先頭に追加すると、結果として得られる連結されたリストでの要素のリスト位置が変わります。

   SET x=$LISTBUILD("A","B","C","D")
   WRITE $LISTFIND(x,"B"),!         ; returns 2
   WRITE $LISTFIND(""_x,"B"),!      ; returns 2
   WRITE $LISTFIND($LB()_x,"B"),!   ; returns 3
   WRITE $LISTFIND($LB(,,,)_x,"B")  ; returns 6

ただし、NULL 文字列を value に連結すると、$LISTFIND には影響を与えません。

   SET x=$LISTBUILD("A","B","C","D")
   WRITE $LISTFIND(x,"B"),!      ; returns 2
   WRITE $LISTFIND(x,"B"_""),!   ; returns 2
   WRITE $LISTFIND(x,""_"B"),!   ; returns 2

以下の例は、要求された文字列の最初に発生した位置である 2 を返します。

   SET x=$LISTBUILD("A","B","C","D")
   WRITE $LISTFIND(x,"B")

以下の例は 0 を返し、要求された文字列が見つからなかったことを表します。

   SET x=$LISTBUILD("A","B","C","D")
   WRITE $LISTFIND(x,"E")

以下の例は、startafter パラメータ使用の効果を示します。最初の例は、要求された文字列が startafter 位置にあるため、文字列が見つからず 0 を返します。

   SET x=$LISTBUILD("A","B","C","D")
   WRITE $LISTFIND(x,"B",2)

2 つ目の例では、要求された文字列の 1 つ目が startafter の位置より前に現れるため、要求された文字列の 2 つ目を見つけて 4 を返します。

   SET y=$LISTBUILD("A","B","C","A")
   WRITE $LISTFIND(y,"A",2)

$LISTFIND 関数は、完全な要素のみと一致します。したがって、以下の例ではすべての要素に “B” が含まれているものの、リスト要素が文字列 “B” とは同じではないため、0 が返されます。

   SET mylist = $LISTBUILD("ABC","BCD","BBB")
   WRITE $LISTFIND(mylist,"B")

一致前に数値がキャノニック形式に変換されるため、以下の数値例はすべて 0 を返します。これらの場合、文字列数値とキャノニック形式の数値は一致しません。

   SET y=$LISTBUILD("1.0","+2","003","2*2")
   WRITE $LISTFIND(y,1.0),!
   WRITE $LISTFIND(y,+2),!
   WRITE $LISTFIND(y,003),!
   WRITE $LISTFIND(y,4)

以下の数値例は、数値がキャノニック形式で比較されるため一致します。

   SET y=$LISTBUILD(7.0,+6,005,2*2)
   WRITE $LISTFIND(y,++7.000),!   ; returns 1
   WRITE $LISTFIND(y,0006),!      ; returns 2
   WRITE $LISTFIND(y,8-3),!       ; returns 3
   WRITE $LISTFIND(y,--4.0)       ; returns 4

以下の例は、指定した startafter 値が一致なしとなるので、すべて 0 を返します。

   SET y=$LISTBUILD("A","B","C","D")
   WRITE $LISTFIND(y,"A",1),!
   WRITE $LISTFIND(y,"B",2),!
   WRITE $LISTFIND(y,"B",99),!
   WRITE $LISTFIND(y,"B",-1)

以下の例は、$LISTFIND を使用して入れ子になったリストを見つけるしくみを示しています。Caché は、複数要素の入れ子になったリストをリスト値のある単一のリスト要素として扱うことに注意してください。

   SET y=$LISTBUILD("A",$LB("x","y"),"C","D")
   WRITE $LISTFIND(y,$LB("x","y"))

関連項目

FeedbackOpens in a new tab