第三十五章 Caché 函數大全 $LISTTOSTRING 函數
從列表中創建一個字符串。
大綱
$LISTTOSTRING(list,delimiter,flag)
$LTS(list,delimiter,flag)
參數
- list Caché列表,使用
$LISTBUILD
或$LISTFROMSTRING
創建,或使用$LIST
從另一個列表中提取。 - delimiter 可選-用於分隔子字符串的定界符。將定界符指定爲帶引號的字符串。如果未指定定界符,則默認爲逗號(
,
)字符。 - flag 可選—一個布爾值,指定如何處理省略的列表元素。 0發出
<NULL VALUE>
錯誤。 1爲該元素插入一個空字符串。默認值爲0。
描述
$LISTTOSTRING
獲取Caché列表並將其轉換爲字符串。在結果字符串中,列表的元素由定界符分隔。
列表以不使用分隔符的編碼格式表示數據。因此,列表可以包含所有可能的字符,並且非常適合於位串數據。 $LISTTOSTRING
將此列表轉換爲帶有定界元素的字符串。它預留了一個指定字符(或字符串)作爲定界符。可以使用$PIECE
函數處理這些定界的元素。
注意:此處指定的定界符不得出現在源數據中。 Caché在用作分隔符的字符和與數據字符相同的字符之間沒有區別。
參數
list
Caché列表,其中包含一個或多個元素。使用$LISTBUILD
創建一個列表,或使用$LIST
從另一個列表中提取一個列表。
如果list參數中的表達式未求值爲有效列表,則會發生<LIST>
錯誤。
DHC-APP>SET x=$CHAR(0,0,0,1,16,27,134,240)
DHC-APP>SET a=$LISTTOSTRING(x,",")
SET a=$LISTTOSTRING(x,",")
^
<LIST>
delimiter
用於在輸出字符串中定界子字符串的字符(或字符串)。它可以是數字或字符串文字(用引號引起來),變量名或計算結果爲字符串的表達式。
通常,分隔符是指定的字符,在字符串數據中從未使用過,但僅留作分隔符,用作分隔子字符串的分隔符。分隔符也可以是多字符字符串,可以在字符串數據中使用其各個字符。
如果未指定定界符,則默認定界符爲逗號(,
)字符。可以指定一個空字符串(“”
)作爲分隔符。在這種情況下,子字符串被串聯而沒有定界符。要將引號字符指定爲定界符,請兩次指定引號字符(“”“”
)或使用$CHAR(34)
。
flag
一個布爾標誌,用於指定如何處理列表中省略的元素。在下面的示例中,$LISTBUILD
創建一個帶有省略元素的列表,並指定了flag = 1選項來處理此列表元素:
DHC-APP>SET colorlist=$LISTBUILD("Red",,"Blue")
DHC-APP>WRITE $LISTTOSTRING(colorlist,,1)
Red,,Blue
DHC-APP>WRITE $LISTTOSTRING(colorlist,,0)
WRITE $LISTTOSTRING(colorlist,,0)
^
<NULL VALUE>
如果省略標誌選項或將其設置爲0,則$LISTTOSTRING
將生成 <NULL VALUE>
錯誤。
請注意,如果flag = 1,則具有空字符串值的元素與省略的元素是無法區分的。因此 $LISTBUILD("Red","","Blue")
和$LISTBUILD("Red",,"Blue")
將返回相同的$LISTTOSTRING
值。如CachéSQL參考中所述,此flag = 1行爲與CachéSQL中的$LISTTOSTRING
實現兼容。
示例
下面的示例創建一個包含四個元素的列表,然後將其轉換爲包含由冒號(:
)字符分隔的元素的字符串:
DHC-APP>SET namelist=$LISTBUILD("Deborah","Noah","Martha","Bowie")
DHC-APP>WRITE $LISTTOSTRING(namelist,":")
Deborah:Noah:Martha:Bowie
下面的示例創建一個包含四個元素的列表,然後將其轉換爲一個用* sp *
字符串分隔的元素的字符串:
DHC-APP>SET namelist=$LISTBUILD("Deborah","Noah","Martha","Bowie")
DHC-APP>WRITE $LISTTOSTRING(namelist,"*sp*")
Deborah*sp*Noah*sp*Martha*sp*Bowie
以下示例創建一個列表,其中包含一個省略的元素和一個具有空字符串值的元素。$LISTTOSTRING
將其轉換爲帶有由冒號(:
)字符分隔的元素的字符串。由於省略了元素,因此需要flag = 1來避免錯誤。但是,當flag = 1時,省略的元素和空字符串值是無法區分的:
DHC-APP>SET namelist=$LISTBUILD("Deborah",,"","Bowie")
DHC-APP>WRITE $LISTTOSTRING(namelist,":",1)
Deborah:::Bowie
$LISTVALID
考慮以下所有有效列表。在flag = 1的情況下,$LISTTOSTRING
返回所有字符串的空字符串(“”
):
/// d ##class(PHA.TEST.Function).LISTTOSTRING()
ClassMethod LISTTOSTRING()
{
WRITE "1",$LISTTOSTRING("",,1),!
WRITE "2",$LISTTOSTRING($LB(),,1),!
WRITE "3",$LISTTOSTRING($LB(UndefinedVar),,1),!
WRITE "4",$LISTTOSTRING($LB(""),,1)
}
DHC-APP>d ##class(PHA.TEST.Function).LISTTOSTRING()
1
2
3
4
對於flag = 0,$LISTTOSTRING
僅針對以下內容返回空字符串(“”
):
DHC-APP>WRITE "1",$LISTTOSTRING("",,0),!
1
DHC-APP>WRITE "4",$LISTTOSTRING($LB(""),,0)
4
其他的會生成<NULL VALUE>
錯誤。