Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

$LIST (ObjectScript)

リストの要素を返すか、置換します。

Synopsis

$LIST(list,position,end)  $LI(list,position,end)   $LIST(list,start1:end1,start2:end2...)  $LI(list,start1:end1,start2:end2...)   SET $LIST(list,position,end)=value  SET $LI(list,position,end)=value

引数

引数 説明
list 有効なリストとして解釈する式。リストにはエンコードが含まれるので、list$LISTBUILD または $LISTFROMSTRING を使用して作成されるか、あるいは $LIST を使用して別のリストから抽出されなければなりません。SET $LIST 構文では、list は変数または多次元プロパティである必要があります。
position

オプションlist の中でサブリストの取得を開始する位置を指定する整数コード。許可される値は、n (list の先頭からの整数カウント)、* (list 内の最後の要素)、および *-n (list の末尾から逆向きの相対オフセット・カウント) です。SET $LIST 構文は、*+n (list の末尾の先に追加する要素の相対オフセットの整数カウント) もサポートします。したがって、リスト内の 1 つ目の要素は 1、2 つ目の要素は 2、リスト内の最後の要素は * であり、最後から 2 番目の要素は *-1 です。position が省略されている場合は、既定値の 1 が使用されます。

古いコード内でリストの最後の要素を指定するには -1 を使用できます。このような -1 の使用法は非推奨であり、* や、*-n または *+n という相対オフセット構文と組み合わせて使用しないでください。

end オプションlist の中でサブリストの取得を終了する位置を指定するコード。list の先頭からの位置カウントを指定する正の整数、または list の終了からカウントした記号コードを指定できます。position と共に使用し、position と同じコード値を使用する必要があります。省略した場合、position で指定された単一要素のみが返されます。
start1:end1

オプションlist から取得する範囲の開始位置と終了位置を指定する整数のペア。startend はコロンで接続します。list の先頭から数えた、要素の正の整数カウントのみを指定できます。範囲ペアに、list の最後を超える整数カウントを含めることができます。startend 以下にする必要があります。

任意の数の start:end の範囲ペアをコンマ区切りリストとして指定できます。範囲ペアは任意の順序で指定できます。範囲ペアは重なっていてもかまいません。また、list 要素を繰り返し使用することができます。

概要

$LIST には以下の 3 つの使用方法があります。

  • list から単一の要素を取得します。構文 $LIST(list,position) を使用します。list の先頭または末尾からのオフセットで要素の位置を検索します。リストから単一の要素を返します。

  • list から要素の単一の範囲を取得します。これには構文 $LIST(list,position,end) が使用されます。list の先頭または末尾からのオフセットで要素を検索します。要素の範囲をリストとして返します。

  • list から要素の複数の範囲を取得します。これには構文 $LIST(list,position1:end1,position2:end2) が使用されます。list の先頭からのオフセットで要素を検索します。また、取得した範囲を連結し、連結した結果をリストとして返します。

  • list 内で要素を置換します。置換要素は、元の要素と同じ長さでも、長くても、短くてもかまいません。これには構文 SET $LIST(list,position,end)=value が使用されます。

単一の要素を返す

$LIST(list, position) 構文:

$LIST は単一の要素を返します。返される要素は position 引数で決まります。

  • $LIST(list) は、list の最初の要素を返します。

  • $LIST(list,position) は、list から position で指定した位置にある要素を返します。position に、list の末尾を超える正の整数カウントや、list の先頭より前になる負の整数カウントを指定することはできません。

Note:

$LIST をループ構造内で使用して、複数の連続した要素値を返さないでください$LIST は実行ごとにリストを最初から評価する必要があるため、これが動作している間、非常に効率が悪くなります。複数の連続した要素値を返す場合、$LISTNEXT 関数を使用した方がはるかに効率的です。

単一のサブリストを返す

$LIST(list,position,end) 構文:

$LIST は、要素の単一のサブリストを返します。このサブリストには 1 つ以上の要素を含めることができます。返される要素は、使用する引数によって決まります。

  • $LIST(list,position,end) は、list から取得した要素の範囲が含まれる "サブリスト" (エンコードされたリスト文字列) を返します。position で指定した開始位置から、end で指定した終了位置 (この位置を含む) までが範囲になります。positionend が同じ要素を指定している場合、$LIST は、この要素をエンコードされたリストとして返します。

    position に、list の末尾を超える正の整数カウントや、list の先頭より前になる負の整数カウントを指定することはできません。end に、list の末尾を超える正の整数カウントを指定できますが、返されるのは既存の list 要素のみです。要素のパディングは実行されません。

複数のサブリストを返す

$LIST(list,start1:end1,start2:end2) 構文:

$LIST は、要素の複数範囲のサブリストを取得してから、それらを単一の戻りリストに連結します。start:end の範囲を 1 つ以上指定できます。複数の範囲はコンマで区切ります。返される要素が 1 つだけでも、戻り値は常にリスト構造になります。

範囲ペアは、コロンで組み合わせた 2 つの正の整数で構成される必要があります。これにより、list の先頭からカウントした要素の範囲を指定します。start および end の値は範囲に含まれます。start の値は end の値以下でなければなりません。例えば、3:4 は list の 3 番目の要素と 4 番目の要素を取得します。3:3 は list の 3番目の要素を取得します。4:3 は無効な範囲であるため、要素は取得されずにスキップされます。start および end に正の整数以外の値を指定することはできません。要素は 1 からカウントされます。ゼロは使用しないでください。ゼロを指定すると、1 に変換されます。したがって、1:1、0:1、0:0、および 1:0 はすべて list の最初の要素を取得します。

start または end、あるいはその両方の値に、list の末尾を超える正の整数カウントを指定できます。指定した要素の範囲を含む範囲サブリストが生成されます。範囲に既存の list 要素が含まれる場合、それらはサブリストに含まれます。範囲に list の末尾を超える要素が含まれる場合、サブリストは適切な数の NULL 要素でパディングされます。NULL 要素が含まれる結果を表示するには、ZWRITE または $LISTTOSTRING(list,,1) を使用する必要があることに注意してください。WRITE では NULL 要素は表示されません。また、$LISTTOSTRING (既定) では <NULL VALUE> エラーが生成されます。

この構文は、$LIST(mylist,2:2,4:7,10:20) のように、重複しない範囲ペアを昇順で指定する場合に使用すると、最も効率的です。ただし、コンマ区切りの範囲ペアは、任意の順序で指定できます。list の要素を、異なる範囲ペアによって複数回取得できます。

以下の例では、4 つの範囲ペアを取得して、それらを単一のリストに連結します。

  SET mylist=$LISTBUILD("a","b","c","d","e","f","g")
  SET result=$LIST(mylist,2:2,1:4,7:9,1:2)
  ZWRITE result

戻り値:result=$lb("b","a","b","c","d","g",,,"a","b")

引数

list

1 つ以上の要素を含む、エンコードされたリスト文字列。リストは、$LISTBUILD または $LISTFROMSTRING を使用して作成するか、$LIST 関数を使用して、他のリストから抽出することができます

要素を返す場合、list は変数またはオブジェクト・プロパティにすることができます。

要素を置換するために、等号の左側で SET と共に $LIST を使用する場合、list は変数または多次元プロパティ参照にすることができますが、非多次元オブジェクト・プロパティにすることはできません。

有効な list 引数は以下のとおりです。

   SET myList = $LISTBUILD("Red","Blue","Green","Yellow")
   WRITE !,$LIST(myList,2)   ; prints Blue
   SET subList = $LIST(myList,2,4)
   WRITE !,$LIST(subList,2)  ; prints Green

以下の例では、subList は有効な list 引数ではありません。ここでは、subList は通常の文字列として返された 1 つの要素であり、エンコードされたリスト文字列ではないからです。

   SET myList = $LISTBUILD("Red","Blue","Green","Yellow")
   SET subList = $LIST(myList,2)
   WRITE $LIST(subList,1)

SET $LIST 構文形式では、list を非多次元オブジェクト・プロパティにすることはできません。

position

返される (または置換される) リスト要素の位置 (要素カウント)。1 つの要素が返されます。リスト要素は 1 からカウントされます。position が省略されると、$LIST は最初の要素を返します。

  • position が正の整数の場合、$LISTlist の先頭から要素をカウントします。positionlist 内の要素数よりも大きい場合、InterSystems IRIS は <NULL VALUE> エラーを発行します。

  • position が * (アスタリスク) の場合、$LISTlist 内の最後の要素を返します。

  • position*-n (アスタリスクとそれに続く負の数) の場合、$LISTlist の末尾からオフセット分だけ逆向きに要素をカウントします。したがって、*-0 はリスト内の最後の要素であり、*-1 は最後から 2 番目のリスト要素 (末尾からのオフセットが 1) です。position の相対オフセット・カウントが list 内の要素数と等しい (結果的に、0 番目の要素を指定している) 場合、InterSystems IRIS は <NULL VALUE> エラーを発行します。position の相対オフセット・カウントが list 内の要素数よりも大きい場合、InterSystems IRIS は <RANGE> エラーを発行します。

  • SET $LIST 構文のみ — position*+n (アスタリスクとそれに続く正の整数) の場合、SET $LISTlist の末尾のオフセット分先の位置に要素を追加します。つまり、*+1 の場合は list の末尾の先に 1 つの要素が追加され、*+2 の場合は list の末尾の 2 つ先の位置に 1 つの要素が追加されます (末尾と追加位置の間にはNULL 文字列の要素が埋め込まれます)。

  • position が 0 または -0 の場合、InterSystems IRIS は <NULL VALUE> エラーを発行します。

end 引数が指定されている場合、position は要素範囲の最初の要素を指定します。要素の範囲は、常にエンコードされたリスト文字列として返されます。(positionend が同じ値のとき) 要素が 1 つだけ返されますが、その値はエンコードされた文字列として返されます。つまり、$LIST(x,2) は同じ要素ですが、$LIST(x,2,2) と同じデータ値にはなりません。

end

整数で指定される、要素範囲の最後の要素の位置。end を指定するには、position を指定する必要があります。end が小数の場合、整数部に切り捨てられます。

end が指定されている場合、返される値はエンコードされたリスト文字列です。このような文字列はエンコードされているため、他の $LIST 関数によってのみ処理される必要があります。

  • position < endendposition が正の整数であり、position < end である場合、$LIST は、指定した要素のリストを含むエンコードされたサブリストを返します (position および end の要素を含む)。position が 0 または 1 の場合、サブリストの先頭は list 内の最初の要素になります。endlist 内の要素数よりも大きい場合、$LISTposition からリストの末尾までのすべての要素を格納しているエンコードされたサブリストを返します。end*-n の場合、position は正の整数か、この end 位置以上の *-n になります。つまり、$LIST(fourlist,*-1,*)$LIST(fourlist,*-3,*-2)$LIST(fourlist,2,*-1) は、すべて有効なサブリストになります。

  • position = endend および position が同じ要素に評価される場合、$LIST は、その 1 つの要素を含むエンコードされたサブリストを返します。例えば、4 要素のリストでは、endposition が同じになる可能性も ($LIST(fourlist,2,2)$LIST(fourlist,*,*)、または $LIST(fourlist,*-2,*-2))、同じ要素を指定する可能性も ($LIST(fourlist,4,*), $LIST(fourlist,3,*-1)) あります。

  • position > endposition > end の場合、$LIST は NULL 文字列 ("") を返します。例えば、4 要素のリストでは、$LIST(fourlist,3,2)$LIST(fourlist,7,*)、または $LIST(fourlist,*-1,*-2) は、どれも NULL 文字列を返します。

  • position=0、endend が指定されていて、position がゼロ (0) または位置 0 に評価される負のオフセットの場合、position 0 は 1 と等しくなります。したがって、end がゼロより大きい要素の位置に評価される場合、$LIST は、position 1 から end 位置までの要素を含むエンコードされたサブリストを返します。end が要素位置 0 に評価される場合も、position > end となるため、$LIST は NULL 文字列 ("") を返します。

  • SET $LIST 構文のみ — end*+n (アスタリスクとそれに続く正の整数) の場合、SET $LISTlist の末尾のオフセット分先の位置に要素の範囲を追加します。position*+n の場合、SET $LIST は値の範囲を追加します。position が正の整数または *-n の場合、SET $LIST は値の置換と追加の両方を行います。最後の要素を置換して要素を追加するには、SET $LIST(mylist,*+0,*+n) を指定します。指定した範囲の開始位置が list の末尾を超える場合、リストには NULL 文字列の要素が必要な分だけ埋め込まれます。end が指定の値の範囲よりも大きい場合、末尾の埋め込みは実行されません

非推奨の -1 の値

古いコードでは、-1 の position または end の値は、リスト内の最後の要素を表します。-1 の値は、**+n、または *-n の構文と組み合わせて使用することはできません。

*-n および *+n 引数値の指定

変数を使用して *-n または *+n を指定する場合は、常に、引数自体でアスタリスクと符号文字を指定する必要があります。

*-n の有効な指定内容は以下のとおりです。

  SET count=2
  SET alph=$LISTBUILD("a","b","c","d")
  WRITE $LIST(alph,*-count)
  SET count=-2
  SET alph=$LISTBUILD("a","b","c","d")
  WRITE $LIST(alph,*+count)

*+n の有効な指定内容は以下のとおりです。

  SET count=2
  SET alph=$LISTBUILD("a","b","c","d")
  SET $LIST(alph,*+count)="F"
  WRITE $LISTTOSTRING(alph,"^",1)

これらの引数値内では、空白を使用できます。

$LIST のエラー

以下の $LIST 引数値では、エラーが発生します。

  • list 引数が有効なリストとして評価されない場合は、$LIST で <LIST> エラーが発生します。$LISTVALID 関数を使用すると、リストの有効性を判定できます。

  • list 引数が NULL 値を含む有効なリストとして評価される場合、またはリストと NULL 値を連結した値である場合、$LIST(list) 構文を指定すると <NULL VALUE> エラーが発生します。この構文は NULL 値を返そうとするからです。以下はすべて有効なリスト ($LISTVALID に従う) ですが、$LIST では <NULL VALUE> エラーが発生します。

      WRITE $LIST(""),!
      WRITE $LIST($LB()),!
      WRITE $LIST($LB(UndefinedVar)),!
      WRITE $LIST($LB(,))
      WRITE $LIST($LB()_$LB("a","b","c"))

    $LIST(list,position) 構文の position 引数に NULL (存在しない) 要素を指定した場合、$LIST は <NULL VALUE> エラーを生成します。その理由は、この構文が NULL 値を返そうとするためです。

       SET mylist=$LISTBUILD("A",,"C")
       WRITE $LIST(mylist,2)  ; generates a <NULL VALUE> error
       SET mylist2=$LISTBUILD("A","B","C")
       WRITE $LIST(mylist2,4) ; generates a <NULL VALUE> error
  • $LIST(list,position) 構文に、0 の position 引数、または 0 番目の要素を指定する負の相対オフセットを指定した場合、$LIST は <NULL VALUE> エラーを生成します。end が指定されている場合は、0 は position 値として有効で、1 と解釈されます。

  • position または end 引数の *-n の値で、list 内の要素の位置数よりも大きな n の値を指定した場合、$LIST で <RANGE> エラーが発生します。

       SET list2=$LISTBUILD("Brown","Black")
       WRITE $LIST(list2,*-2) ; generates a <NULL VALUE> error
       WRITE $LIST(list2,*-3) ; generates a <RANGE> error

    $LISTLENGTH("") が 0 であるため、*-1 以上の position または end は <RANGE> エラーになります。

       WRITE $LIST("",*-0)   ; generates a <NULL VALUE> error
       WRITE $LIST("",*-1)   ; generates a <RANGE> error
       WRITE $LIST("",0,*-1) ; generates a <RANGE> error
  • position 引数の値または end 引数の値が -1 未満の場合は、$LIST で <RANGE> エラーが発生します。

SET $LIST を使用した要素の置換

  • SET $LIST(list,position) を使用すると、1 つの要素の値の置換、またはリストへの 1 つの要素の追加を実行できます。この 2 引数形式では、新しい要素の値を指定します。

  • SET $LIST(list,position,end) を使用すると、1 つ以上の要素の削除、1 つ以上の要素の値の置換、またはリストへの 1 つ以上の要素の追加を実行できます。この 3 引数形式では、新しい要素の値をエンコードされたリストとして指定する必要があります

(SET $LIST$LIST(list,start1:end1,start2:end2) 構文をサポートしません。)

等号の左側で SET と共に $LIST を使用する場合、list は有効な変数名にすることができます。変数が存在しない場合は、SET $LIST が変数を定義します。list 引数は、多次元プロパティ参照にすることもできますが、非多次元オブジェクト・プロパティにすることはできません。非多次元オブジェクト・プロパティで SET $LIST を使用しようとすると、<OBJECT DISPATCH> エラーが発生します。

$LIST (または $PIECE$EXTRACT) を伴った SET (a,b,c,...)=value 構文は、その関数で相対オフセット構文 * (文字列の末尾を表す)、*-n または *+n (文字列の末尾からの相対オフセットを表す) を使用する場合、等号の左側では使用できません。その代わりに、SET a=value,b=value,c=value,... 構文を使用する必要があります。

さらに、$LISTUPDATE を使用して、リスト内の 1 つ以上の要素を置換したり、要素位置を指定して要素をリストに追加したりできます。$LISTUPDATE はリスト要素を置換し、各要素の置換に対してブーリアン・テストを実行します。SET $LIST とは異なり、$LISTUPDATE は初期リストを変更しませんが、指定された要素の置換が行われた初期リストのコピーを返します。

2 引数操作

以下の 2 引数操作を実行できます。リストとして要素の値を指定すると、リスト内にサブリストが作成されます。

  • 要素の値を新しい値に置き換える

      SET $LIST(fruit,2)="orange"   ; count from beginning of list
      SET $LIST(fruit,*)="pear"     ; element at end of list
      SET $LIST(fruit,*-2)="peach"  ; offset from end of list
      SET $LIST(fruit,2)=""         ; sets the value to the null string
  • 要素をリストに追加する。*+n 構文を使用すると、リストの末尾への追加も、リストの末尾より先の位置への追加も可能です。SET $LIST は、必要に応じて NULL 値の要素を挿入して指定した位置までの間を埋め込みます。

      SET $LIST(fruit,*+1)="plum"
  • 1 つの要素を要素のサブリストに置き換える

      SET $LIST(fruit,3)=$LISTBUILD("orange","banana")

3 引数操作

以下の 3 引数 (範囲) 操作を実行できます。範囲操作では、要素の値を 1 つだけ指定する場合でも、その値をリストとして指定する点に注意してください。

  • 1 つの要素を複数の要素に置き換える

      SET $LIST(fruit,3,3)=$LISTBUILD("orange","banana")
  • 要素の値の範囲を新しい値の同じ数に置き換える

      SET $LIST(fruit,2,3)=$LISTBUILD("orange","banana")
  • 要素の値の範囲を大きな新しい値または小さな新しい値に置き換える

      SET $LIST(fruit,2,3)=$LISTBUILD("orange","banana","peach")
  • 要素の値の範囲を削除する (ここでは要素の値を NULL 文字列に設定しています。要素の位置は削除していません)

      SET $LIST(fruit,2,3)=$LISTBUILD("","")
  • 要素の値の範囲と、それらの位置を削除する

      SET $LIST(fruit,2,3)=""
  • 要素の範囲をリストに追加する。*+n 構文を使用すると、リストの末尾への追加も、リストの末尾より先の位置への追加も可能です。SET $LIST は、必要に応じて NULL 値の要素を挿入して指定した位置までの間を埋め込みます。

      SET $LIST(fruit,*+1,*+2)=$LISTBUILD("plum","pear")

    SET $LIST は、指定した要素の値のみを追加します。end の位置が指定の要素数よりも大きい場合、末尾の空の要素の位置は作成されません

$LIST を使用して要素を返す例

以下の例は、$LIST の 2 引数形式を使用して、リスト要素を返します。

以下の 2 つの $LIST 文はリストの先頭要素である “Red” を返します。最初の文は、既定で先頭要素を返します。2 番目の文は、position 引数が 1 に設定されているために先頭要素を返します。

   SET colorlist=$LISTBUILD("Red","Orange","Yellow","Green","Blue","Violet")
   WRITE $LIST(colorlist),!
   WRITE $LIST(colorlist,1)

以下の 2 つの $LIST 文はリストの 2 番目の要素である “Orange” を返します。最初の文はリストの先頭からカウントします。2 番目の文はリストの末尾から逆向きにカウントします。

   SET colorlist=$LISTBUILD("Red","Orange","Yellow","Green","Blue","Violet")
   WRITE $LIST(colorlist,2),!
   WRITE $LIST(colorlist,*-4)

以下の例は、$LIST の 3 引数形式を使用して、1 つ以上の要素をエンコードされたリスト文字列として返します。リストには出力不能なエンコード文字が含まれているため、$LISTTOSTRING を使用して、サブリストを出力可能な文字列に変換する必要があります。

以下の 2 つの $LIST 文は、エンコードされたリスト文字列として、リストの 5 番目の要素である “Blue” を返します。最初の文はリストの先頭からカウントします。2 番目の文はリストの末尾から逆向きにカウントします。範囲として要素が指定されているため、これは 1 つの要素で構成されたリストとして取得されます。

   SET colorlist=$LISTBUILD("Red","Orange","Yellow","Green","Blue","Violet")
   WRITE $LISTTOSTRING($LIST(colorlist,5,5))
   WRITE $LISTTOSTRING($LIST(colorlist,*-1,*-1))

以下の例は “Red Orange Yellow” を返します。これは、リスト内の先頭要素から始まり 3 番目の要素で終了する 3 つの要素のリスト文字列です。

   SET colorlist=$LISTBUILD("Red","Orange","Yellow","Green","Blue","Violet")
   WRITE $LISTTOSTRING($LIST(colorlist,1,3))

以下の例は “Green Blue Violet” を返します。これは、リスト内の 4 番目の要素から始まり最後の要素で終了する 3 つの要素のリスト文字列です。

   SET colorlist=$LISTBUILD("Red","Orange","Yellow","Green","Blue","Violet")
   WRITE $LISTTOSTRING($LIST(colorlist,4,*))

以下の例は、プロパティからのリスト要素を返します。

  SET cfg=##class(%iKnow.Configuration).%New("Trilingual",1,$LB("en","fr","es"))
  WRITE $LIST(cfg.Languages,2)

SET $LIST を使用して要素を置換、削除または追加する例

以下の例は、2 つめの要素を置き換える SET $LIST を示します。

   SET fruit=$LISTBUILD("apple","onion","banana","pear")
   WRITE !,$LISTTOSTRING(fruit,"/")
   SET $LIST(fruit,2)="orange"
   WRITE !,$LISTTOSTRING(fruit,"/")

以下の例は、2 つめと 3 つめの要素を置き換える SET $LIST を示します。

   SET fruit=$LISTBUILD("apple","potato","onion","pear")
   WRITE !,$LISTTOSTRING(fruit,"/")
   SET $LIST(fruit,2,3)=$LISTBUILD("orange","banana")
   WRITE !,$LISTTOSTRING(fruit,"/")

以下の例は、2 つめと 3 つめの要素を 4 つめの要素に置き換える SET $LIST を示します。

   SET fruit=$LISTBUILD("apple","potato","onion","pear")
   WRITE !,$LISTTOSTRING(fruit,"/")
   SET $LIST(fruit,2,3)=$LISTBUILD("orange","banana","peach","tangerine")
   WRITE !,$LISTTOSTRING(fruit,"/")

以下の例では、リストの末尾に 1 つの要素を追加する SET $LIST を示します。

   SET fruit=$LISTBUILD("apple","orange","banana","peach")
   WRITE $LL(fruit)," ",$LISTTOSTRING(fruit,"/",1),!
   SET $LIST(fruit,*+1)="pear"
   WRITE $LL(fruit)," ",$LISTTOSTRING(fruit,"/",1)

以下の例では、リストの末尾から 3 つ先に 1 つの要素を追加する SET $LIST を示します。

   SET fruit=$LISTBUILD("apple","orange","banana","peach")
   WRITE $LL(fruit)," ",$LISTTOSTRING(fruit,"/",1),!
   SET $LIST(fruit,*+3)="tangerine"
   WRITE $LL(fruit)," ",$LISTTOSTRING(fruit,"/",1)

以下の 4 つの例では、*-n 構文を使用して、リストの末尾からオフセット分の位置の要素を置換する SET $LISTを示します。SET $LIST(x,*-n)SET $LIST(x,n,*-n) では異なる操作が行われます。SET $LIST(x,*-n) は、指定した要素の value を置換します。SET $LIST(x,n,*-n) は、指定した要素の範囲を削除してから、指定したリストを追加します。

最後から 2 番目の要素を 1 つの値に置き換えるには、SET $LIST(x,*-1) を使用します。

   SET fruit=$LISTBUILD("apple","banana","orange","potato","pear")
   WRITE !,"list length is ",$LISTLENGTH(fruit)," "
   WRITE $LISTTOSTRING(fruit,"/")
   SET $LIST(fruit,*-1)="peach"
   WRITE !,"list length is ",$LISTLENGTH(fruit)," "
   WRITE $LISTTOSTRING(fruit,"/")

リストの末尾からオフセット分の位置の 1 つの要素を削除するには、SET $LIST(x,*-n,*-n)="" を使用します。

   SET fruit=$LISTBUILD("apple","banana","orange","potato","pear")
   WRITE !,"list length is ",$LISTLENGTH(fruit)," "
   WRITE $LISTTOSTRING(fruit,"/")
   SET $LIST(fruit,*-1,*-1)=""
   WRITE !,"list length is ",$LISTLENGTH(fruit)," "
   WRITE $LISTTOSTRING(fruit,"/")

リストの末尾からオフセット分の位置の 1 つの要素を要素のリストに置き換えるには、SET $LIST(x,*-n,*-n)=list を使用します。

   SET fruit=$LISTBUILD("apple","banana","potato","orange","pear")
   WRITE !,"list length is ",$LISTLENGTH(fruit)," "
   WRITE $LISTTOSTRING(fruit,"/")
   SET $LIST(fruit,*-2,*-2)=$LISTBUILD("peach","plum","quince")
   WRITE !,"list length is ",$LISTLENGTH(fruit)," "
   WRITE $LISTTOSTRING(fruit,"/")

リストの末尾からオフセット分の位置の 1 つの要素をサブリストに置き換えるには、SET $LIST(x,*-n)=list を使用します。

   SET fruit=$LISTBUILD("apple","banana","potato","orange","pear")
   WRITE !,"list length is ",$LISTLENGTH(fruit)," "
   WRITE $LISTTOSTRING(fruit,"/")
   SET $LIST(fruit,*-2)=$LISTBUILD("peach","plum","quince")
   WRITE !,"list length is ",$LISTLENGTH(fruit)," "
   WRITE $LISTTOSTRING(fruit,"/")

以下の例は、3 つめの要素からリストの最後まで、リストから要素を削除する SET $LIST を示します。

   SET fruit=$LISTBUILD("apple","orange","onion","peanut","potato")
   WRITE !,"list length is ",$LISTLENGTH(fruit)," "
   WRITE $LISTTOSTRING(fruit,"/")
   SET $LIST(fruit,3,*)=""
   WRITE !,"list length is ",$LISTLENGTH(fruit)," "
   WRITE $LISTTOSTRING(fruit,"/")

Unicode

リスト要素内に Unicode 文字が 1 つでもあれば、リスト要素全体が Unicode (ワイド) 文字として表されます。リスト内の他の要素は影響されません。

以下の例は、2 つのリストを示しています。y リストは、ASCII 文字のみが含まれる 2 つの要素で構成されます。z リストは 2 つの要素で構成され、最初の要素には Unicode 文字 ($CHAR(960)、つまり pi 記号) が含まれ、2 番目の要素には ASCII 文字のみが含まれます。

   SET y=$LISTBUILD("ABC"_$CHAR(68),"XYZ")
   SET z=$LISTBUILD("ABC"_$CHAR(960),"XYZ")
   WRITE !,"The ASCII list y elements: "
   ZZDUMP $LIST(y,1)
   ZZDUMP $LIST(y,2)
   WRITE !,"The Unicode list z elements: "
   ZZDUMP $LIST(z,1)
   ZZDUMP $LIST(z,2)

InterSystems IRIS は、z の先頭要素全体をワイド Unicode 文字でエンコードすることに注意してください。z の 2 番目の要素には Unicode 文字が含まれないため、InterSystems IRIS は 1 バイトの ASCII 文字を使用してエンコードします。

$EXTRACT と $PIECE と比較した $LIST

$LIST は、リストの先頭 (または末尾) から要素 (文字ではありません) をカウントすることで、エンコードされたリストから 1 つの要素を決定します。

$EXTRACT は、文字列の先頭 (または末尾) から文字をカウントすることで、部分文字列を決定します。$EXTRACT は、入力として通常の文字列を取ります。

$PIECE は、文字列内のユーザ定義の区切り文字をカウントすることにより、部分文字列を決定します。$PIECE は、区切り文字として使用するための文字 (または文字列) の複数のインスタンスを含む通常の文字列を入力として取ります。

$LIST は通常の文字列では使用できません。$PIECE および $EXTRACT はエンコードされたリストでは使用できません。

関連項目

FeedbackOpens in a new tab