第三十五章 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>
错误。
网友评论