$Order()

その最初の引数で指定された配列のレベル内で、照合順序内の、次または前のローカルまたはグローバル変数名の添字を返します。そうすることで、それは2番目の引数で指定された方向に移動します。GT.Mでは、$ORDER() が添字のない引数を持つとき、それは、照合順序内の添字なしのローカルまたはグローバル変数の次または前の名前を返します。

$ORDER関数のフォーマット:

$O[RDER](glvn[,expr])
[注意] 注意

拡張参照で使用すると、名前レベルの$ORDER() は常に空文字列を返します。

$ORDER()の例

例:

GTM>zwrite
lcl(1)=3
lcl("x")=4
GTM>write $order(lcl(""))
1

引数の指定された最後の添字がnullであるので、この例では、1である最初のノードを返し、lcl は null 添字を持ちません。

例:

GTM>write $order(lcl(1))
x

lcl がnull 添字を持たないので、この例では、lcl(1)の後の最初のノードを返します、すなわち x 。

例:

GTM>write $order(lcl(""),-1)
x

最初の引数の最後の添字がNULLであったり、2番目の引数に -1が あるので、この例では、最後のノードを返します、すなわち x 。

GTM>set lcl("")=2
GTM>zwrite
lcl("")=2
lcl(1)=3
lcl("x")=4
GTM>write $order(lcl(""))
1

この例では、引数の末尾で null 添字があいまいであるので(それは最初から開始か、または、null 添字を持つ実ノードから開始かを指定するのでしょうか?)、指定されたレベルで2番目のノードを返し、そして、最初のノード(空文字列)の添字を返すことが、無限ループを作成する傾向があるでしょう。

例:

GTM>write $order(lcl(""),-1)
x
GTM>write $order(lcl("x"),-1)
1

例:

GTM>kill  set (a(1),a(2000),a("CAT"),a("cat"),a("ALF"),a(12))=1
GTM>set x="" for  set x=$order(a(x)) quit:x=""  write !,x
1
12
2000
ALF
CAT
cat
GTM>kill a("CAT") set a(5,10)="woolworths",a("cat")="last"
GTM>set x="" for  set x=$order(a(x),-1) quit:x=""  write !,x
cat
ALF
2000
12
5
1
GTM>

この例では、ローカル変数 a の最初のレベルですべての添字を表示するために $ORDER() ループを使用し、a のいくつかの変更を行い、次に逆の順序ですべての添字を表示します。$ORDER() は、多次元散在配列で既存の添字のみを返し、そして、それらが入力された順序に関係なく、Mの照合順序でそれらを返すことに注意してください。また、$ORDER() は、下位ノード(データ値でない)だけを持つ A(5) のノードとデータの値を持つ他のノードとを区別しません。

例:

GTM>kill set (%(1),tiva(2),A(3),tiv(4),Q(5),%a(6))=""
GTM>set x="%"
GTM>write:$data(@x) !,x for  set x=$order(@x) quit:x=""  write !,x
%
%a
A
Q
tiv
tiva
x
GTM>set $piece(x,"z",32)=""
GTM>write:$data(@x) !,x for  set x=$order(@x,-1) quit:x=""  write !,x
x
tiva
tiv
Q
A
%a
%
GTM>

この例では、順方向および逆方向の両方の順序で、現在のローカル変数名を表示するために、$ORDER() を使用しています。最初 ([^]%) と最後 ([^]zzzzzzzz) 名前は、特別なケースとして扱う必要があり、$DATA()関数を必要とすることに、注意してください。

例:

  set acct="",cntt=""
  for  fet acct=$order(^acct(acct)) quit:acct=""  do
  . for  set cntt=$order(^acct(acct,cntt)) do WORK
  quit

これは、^acct のグローバル配列を循環的に $ORDER() ループを2つのネストで使用し、それぞれの2番目のレベルのノードに対して何らかのアクションを実行します。

inserted by FC2 system