第二十八章 Caché 函數大全 $LISTDATA 函數
指示指定的元素是否存在並具有數據值。
大綱
$LISTDATA(list,position,var)
$LD(list,position,var)
參數
- list 計算結果爲有效列表的表達式。
- position 可選—表達式,被解釋爲指定列表中的位置。正,非零整數或-1。
- var 可選-包含在指定列表位置的元素值的變量。如果LISTDATA返回的值爲0,則var保持不變。
描述
$LISTDATA
在列表中的請求元素中檢查數據,並返回一個布爾值。如果position參數指示的元素在列表中並且具有數據值,則$LISTDATA
返回值1。如果該元素不在列表中或沒有數據值,則$LISTDATA
返回值爲0。
(可選)$LISTDATA
可以將元素值寫入var變量。
注意:$LISTDATA
不應在循環結構中用於返回多個連續的元素值。儘管這將起作用,但它的效率極低,因爲$LISTDATA
必須在每次迭代開始時就計算列表。 $LISTNEXT
函數是返回多個連續元素值的更有效的方法。
參數
list
列表是包含多個元素的編碼字符串。必須使用$LISTBUILD
或$LISTFROMSTRING
創建一個列表,或使用$LIST
從另一個列表中提取一個列表。
可以使用$LISTVALID
函數來確定表達式是否爲有效列表。如果list參數中的表達式未求值爲有效列表,則會發生<LIST>
錯誤。如果有效列表在指定位置不包含任何數據,則$LISTDATA
返回0。
position
列表中元素的整數位置,從1開始計數。如果省略position參數,則$LISTDATA將計算第一個元素。如果position參數的值爲-1,則等效於指定列表的最後一個元素。
如果position指向不存在的列表成員,則$LISTDATA
返回0。位置0始終返回0。如果position的值小於-1,則調用$LISTDATA
函數將產生<RANGE>
錯誤。
var
如果$LISTDATA
返回值1,則Caché將請求的元素的值寫入var。如果$LISTDATA
返回值0,則var不變。var參數可以是局部,全局或進程專用全局變量,帶或不帶下標。不需要定義;第一次返回1的$LISTDATA
調用定義並設置了var。如果第一次調用$LISTDATA
返回0,則var保持未定義狀態。
var參數不能是非多維對象屬性。嘗試將值寫入非多維對象屬性會導致<OBJECT DISPATCH>
錯誤.
var參數不能爲特殊變量。嘗試將值寫入特殊變量會導致錯誤。
示例
以下兩個示例顯示了position參數的各種值的結果。
以下$LISTDATA
語句返回值0:
/// d ##class(PHA.TEST.Function).LISTDATA()
ClassMethod LISTDATA()
{
KILL y
SET x=$LISTBUILD("Red",,y,"","Green",)
WRITE !,$LISTDATA(x,2) ; 第二個元素未定義
WRITE !,$LISTDATA(x,3) ; 第三個元素是被殺死的變量
WRITE !,$LISTDATA(x,-1) ; 最後一個元素未定義
WRITE !,$LISTDATA(x,0) ; 第0個位置
WRITE !,$LISTDATA(x,6) ; 5元素清單中的第六名
}
DHC-APP>d ##class(PHA.TEST.Function).LISTDATA()
0
0
0
0
0
以下$LISTDATA
語句返回值1:
/// d ##class(PHA.TEST.Function).LISTDATA1()
ClassMethod LISTDATA1()
{
SET x=$LISTBUILD("Red",,y,"","Green",)
WRITE !,$LISTDATA(x) ; 第一個元素(默認情況下)
WRITE !,$LISTDATA(x,1) ; 指定第一個元素
WRITE !,$LISTDATA(x,4) ; 第四個元素 ""字符串
WRITE !,$LISTDATA(x,5) ; 第五個元素
}
DHC-APP>d ##class(PHA.TEST.Function).LISTDATA1()
1
1
1
1
以下3參數$LISTDATA
語句測試元素值的存在並使用該值更新evalue
變量。請注意,當$LISTDATA
返回0時,evalue
保持不變:
/// d ##class(PHA.TEST.Function).LISTDATA2()
ClassMethod LISTDATA2()
{
SET x=$LISTBUILD("Red",,y,"","Green",)
FOR i=1:1:$LISTLENGTH(x) {
WRITE "element ",i," data? ",$LISTDATA(x,i,evalue)," value ",evalue,!
}
WRITE i," list elements"
}
DHC-APP>d ##class(PHA.TEST.Function).LISTDATA2()
element 1 data? 1 value Red
element 2 data? 0 value Red
element 3 data? 0 value Red
element 4 data? 1 value
element 5 data? 1 value Green
element 6 data? 0 value Green
6 list elements
以下所有$LISTDATA
語句均返回值0:
/// d ##class(PHA.TEST.Function).LISTDATA3()
ClassMethod LISTDATA3()
{
WRITE !,$LISTDATA($LB()) ; null list
WRITE !,$LISTDATA($LB(UndefinedVar)) ; null list
WRITE !,$LISTDATA("") ; null string is a valid list but contain no data
WRITE !,$LISTDATA($LB(,)) ; two-element null list
}
DHC-APP>d ##class(PHA.TEST.Function).LISTDATA3()
0
0
0
0
以下$LISTDATA
語句返回值1:
/// d ##class(PHA.TEST.Function).LISTDATA4()
ClassMethod LISTDATA4()
{
WRITE !,$LISTDATA($LB("")) ; data is null string
WRITE !,$LISTDATA($LB($CHAR(0))) ; data is non-display character
}
DHC-APP>d ##class(PHA.TEST.Function).LISTDATA4()
1
1