第二十八章 Caché 函數大全 $LISTDATA 函數 第二十八章 Caché 函數大全 $LISTDATA 函數 大綱 描述 參數 示例

第二十八章 Caché 函數大全 $LISTDATA 函數

指示指定的元素是否存在並具有數據值。

大綱

$LISTDATA(list,position,var)
$LD(list,position,var)

參數

  • list 計算結果爲有效列表的表達式。
  • position 可選—表達式,被解釋爲指定列表中的位置。正,非零整數或-1。
  • var 可選-包含在指定列表位置的元素值的變量。如果LISTDATA返回值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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章