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?

Traverse

配列を走査し、次の添え字を返します。

Synopsis

Traverse(varname[,direction[,target]])

引数

varname 配列を表す変数の名前。varname では添え字レベルを指定する必要があります。
direction オプション — 前 (1)、または後 (-1) のいずれかを示す数値。このパラメータが省略された場合、Traverse 関数は次の添え字に移動します。
target オプション — 結果ノードのデータを含む変数。

概要

Traverse 関数は指定された添え字レベルで、次の添え字、または前の添え字の名前を返します。オプションの target 引数を使うと、検出された添え字のデータ値も返すことができます。

現在レベルの最初から検索を開始するときは、添え字に空文字列 ("") を指定します。以下の例は、最初の添え字レベルで最初の添え字を返します。

subscript = Traverse(^Person(""))

Traverse が与えられたレベルで添え字の最後に到達すると、空文字列 ("") を返します。

以下の例は、ループ内での Traverse 関数の使用法を示しています。

subscript = ""
subscript = Traverse(^Person(subscript))
While subscript <> ""
  subscript = Traverse(^Person(subscript))
  Println subscript
wend

target 変数が指定されており、ノードが定義 (vbHasValue) されている場合、target 変数はこのノードに対するデータを含みます。結果として得られるノードが値を持たない場合、target 変数の値は変更されません。

Caché Basic には、方向を示す vbForward と vbBackward の 2 つの定数があります。

以下の例は、Traverse 関数を使用して、次のノードの添え字名を返す方法を示しています。最初の Traverse は、空の文字列を添え字に指定しており、配列内の最初の添え字 ("A") を返します。2 番目および 3 番目の Traverse 関数は、添え字名を指定し、次の添え字の名前を返します。4 番目の Traverse は、添え字として "C"、および direction に -1 (後方) を指定しています。前の添え字の "B" の名前が返されます。最後の Traverse は、空の文字列を添え字に指定し、direction に -1 を指定しています。最後の添え字の名前が返されます (配列の最後から、後ろ向きに検索して最初に見つかった添え字)。この場合は "D" が返されます。

array("A") = "A node"
array("B") = "B node"
array("B", 1) = "B,1 node"
array("B", 2) = "B,2 node"
array("C", 1) = "C node"
array("D") = "D node"

Println Traverse(array(""))  ' prints A
Println Traverse(array("A")) ' prints B
Println Traverse(array("B")) ' prints C
Println Traverse(array("C"),-1) ' prints B
Println Traverse(array(""),-1) ' prints D

以下の例は、引数 target の使用法を示しています。最初の myString は、"A" ノードのデータ値を含んでいます。2 番目の myString は、このレベルのデータ値を含むノード ("C") を参照しています。この場合、myString には前の値が引き続き格納されます。

array("A") = "A node"
array("B") = "B node"
array("C", 1) = "C1 node"
array("D") = "D node"

Println Traverse(array(""),1,myString)  ' prints A
Println myString                        ' prints A node
Println Traverse(array("B"),1,myString) ' prints C
Println myString                        ' prints A node

関連項目

FeedbackOpens in a new tab