第二十九章 Caché 函數大全 $LISTFIND 函數 第二十九章 Caché 函數大全 $LISTFIND 函數 大綱 描述 示例

第二十九章 Caché 函數大全 $LISTFIND 函數

在指定的列表中搜索所需的值。

大綱

$LISTFIND(list,value,startafter)
$LF(list,value,startafter)

參數

  • list 計算結果爲有效列表的表達式。列表是包含一個或多個元素的編碼字符串。必須使用$LISTBUILD$LISTFROMSTRING創建一個列表,或者使用$LIST從另一個列表中提取一個列表。
  • value 包含所需元素值的表達式。
  • startafter 可選-解釋爲列表位置的整數表達式。搜索從該位置之後的元素開始;因此,0表示從位置1開始,1表示從位置2開始。startafter = -1是有效值,但始終不返回匹配項。僅使用startafter值的整數部分。

描述

$LISTFIND在指定的列表中搜索請求值的第一個實例。匹配項必須精確且包含完整的元素值。字母比較區分大小寫。數字以規範形式進行比較。如果找到完全匹配的內容,則$LISTFIND返回匹配元素的位置。如果找不到值,則$LISTFIND返回0。

搜索從startafter參數指示的位置之後的元素開始。如果省略startafter參數,則$LISTFIND假定startafter值爲0,並從第一個元素(元素1)開始搜索。

如果找不到匹配項,則$LISTFIND返回0。如果startafter參數的值引用不存在的列表成員,則$LISTFIND也將返回0。

可以使用$LISTVALID函數來確定列表是否爲有效列表。如果列表不是有效列表,則系統生成<LIST>錯誤。

如果startafter參數的值小於-1,則調用$LISTFIND函數將產生錯誤。

Empty Strings 與 Empty Lists

$LISTFIND函數可用於查找空字符串值,如以下示例所示:

DHC-APP> SET x=$LISTBUILD("A","","C","D")
 
DHC-APP> WRITE $LISTFIND(x,"")   ; returns 2
2

$LISTFIND可以與包含省略的元素的列表一起使用,但是不能用於定位省略的元素。下面的示例在列表中找到一個包含省略元素的值:

   SET x=$LISTBUILD("A",,"C","D")
  WRITE $LISTFIND(x,"C")   ; returns 3

以下$LISTFIND示例返回1:

DHC-APP>  WRITE $LISTFIND($LB(""),"")   ; returns 1
1

以下$LISTFIND示例返回0:

DHC-APP>WRITE $LISTFIND("",""),!
0
 
DHC-APP>WRITE $LISTFIND($LB(),""),!
0

以下示例列表包含一個空列表,該空列表與包含數據的列表連接在一起。在空列表前添加將更改元素在最終的串聯列表中的列表位置:

/// d ##class(PHA.TEST.Function).LISTFIND()
ClassMethod LISTFIND()
{
    SET x=$LISTBUILD("A","B","C","D")
    WRITE $LISTFIND(x,"B"),!         ; returns 2
    WRITE $LISTFIND(""_x,"B"),!      ; returns 2
    WRITE $LISTFIND($LB()_x,"B"),!   ; returns 3
    WRITE $LISTFIND($LB(,,,)_x,"B")  ; returns 6
}
DHC-APP>d ##class(PHA.TEST.Function).LISTFIND()
2
2
3
6

但是,將空字符串連接到value對$LISTFIND無效:

/// d ##class(PHA.TEST.Function).LISTFIND1()
ClassMethod LISTFIND1()
{
    SET x=$LISTBUILD("A","B","C","D")
    WRITE $LISTFIND(x,"B"),!      ; returns 2
    WRITE $LISTFIND(x,"B"_""),!   ; returns 2
    WRITE $LISTFIND(x,""_"B"),!   ; returns 2
}
DHC-APP>d ##class(PHA.TEST.Function).LISTFIND1()
2
2
2
 

示例

以下示例返回2,即所請求的字符串首次出現的位置:

DHC-APP>SET x=$LISTBUILD("A","B","C","D")
 
DHC-APP>WRITE $LISTFIND(x,"B")
2

下面的示例返回0,指示找不到請求的字符串:

DHC-APP>SET x=$LISTBUILD("A","B","C","D")
 
DHC-APP>WRITE $LISTFIND(x,"E")
0

以下示例顯示了使用startafter參數的效果。第一個示例找不到請求的字符串並返回0,因爲該字符串出現在startafter位置:

DHC-APP>SET x=$LISTBUILD("A","B","C","D")
 
DHC-APP>WRITE $LISTFIND(x,"B",2)
0

第二個示例查找請求的字符串的第二個出現並返回4,因爲第一個出現在startafter位置之前:

DHC-APP>SET y=$LISTBUILD("A","B","C","A")
 
DHC-APP>WRITE $LISTFIND(y,"A",2)
4

$LISTFIND函數僅匹配完整的元素。因此,以下示例返回0,因爲列表中的所有元素都不等於字符串“B”,儘管所有元素都包含“B”:

DHC-APP>SET mylist = $LISTBUILD("ABC","BCD","BBB")
 
DHC-APP>WRITE $LISTFIND(mylist,"B")
0

以下數字示例均返回0,因爲數字在匹配之前已轉換爲規範形式。在這些情況下,字符串數字值和規範形式號不匹配:

/// d ##class(PHA.TEST.Function).LISTFIND2()
ClassMethod LISTFIND2()
{
    SET y=$LISTBUILD("1.0","+2","003","2*2")
    WRITE $LISTFIND(y,1.0),!
    WRITE $LISTFIND(y,+2),!
    WRITE $LISTFIND(y,003),!
    WRITE $LISTFIND(y,4)
}
DHC-APP>d ##class(PHA.TEST.Function).LISTFIND2()
0
0
0
0

以下數字示例匹配,因爲數字值以規範形式進行比較:

/// d ##class(PHA.TEST.Function).LISTFIND3()
ClassMethod LISTFIND3()
{
    SET y=$LISTBUILD(7.0,+6,005,2*2)
    WRITE $LISTFIND(y,++7.000),!   ; returns 1
    WRITE $LISTFIND(y,0006),!      ; returns 2
    WRITE $LISTFIND(y,8-3),!       ; returns 3
    WRITE $LISTFIND(y,--4.0)       ; returns 4
}
DHC-APP>d ##class(PHA.TEST.Function).LISTFIND3()
1
2
3
4

以下示例均返回0,因爲指定的startafter值不匹配:

/// d ##class(PHA.TEST.Function).LISTFIND4()
ClassMethod LISTFIND4()
{
    SET y=$LISTBUILD("A","B","C","D")
    WRITE $LISTFIND(y,"A",1),!
    WRITE $LISTFIND(y,"B",2),!
    WRITE $LISTFIND(y,"B",99),!
    WRITE $LISTFIND(y,"B",-1)
}
DHC-APP>d ##class(PHA.TEST.Function).LISTFIND4()
0
0
0
0

以下示例顯示瞭如何使用$LISTFIND查找嵌套列表。請注意,Caché將多元素嵌套列表視爲具有列表值的單個列表元素:

DHC-APP> SET y=$LISTBUILD("A",$LB("x","y"),"C","D")
 
DHC-APP> WRITE $LISTFIND(y,$LB("x","y"))
2
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章