第三十五章 Caché 函数大全 $LISTTOSTRING 函数 第三十五章 Caché 函数大全 $LISTTOSTRING 函数 大纲 描述 参数 示例

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章