第二十五章 Caché 函数大全 $LENGTH 函数

2020-09-15  本文已影响0人  Cache技术分享

第二十五章 Caché 函数大全 $LENGTH 函数

返回字符串中的字符数或带分隔符的子字符串。

大纲

$LENGTH(expression,delimiter)
$L(expression,delimiter)

参数

描述

$LENGTH根据使用的参数返回指定字符串中的字符数或指定字符串中带分隔符的子字符串数。请注意,长度计算字符数;8位字符和16位宽(Unicode)字符都被视为一个字符。

此语法可以与$EXTRACT函数一起使用,该函数按位置查找子字符串并返回该子字符串的值。

此语法可以与$PIECE函数一起使用,该函数通过定界符查找子字符串并返回该子字符串值。

如果定界符是空字符串,则$LENGTH返回0。如果定界符是任何其他有效字符串文字,并且该字符串是空字符串,则$LENGTH返回1。

编码字符串

Caché支持包含内部编码的字符串。由于这种编码,$LENGTH不应用于确定字符串的数据内容。

代理对

$LENGTH无法识别代理对。代理对用于表示某些中文字符并支持日语JIS2004标准。可以使用$WISWIDE函数确定字符串是否包含代理对。 $WLENGTH函数可以识别并正确解析代理对。 $LENGTH$WLENGTH在其他方面相同。但是,由于$LENGTH通常比$WLENGTH快,因此对于不太可能遇到代理对的所有情况,$LENGTH是更可取的。

示例

在下面的示例中,两个$LENGTH函数都返回4,即字符串中的字符数。

/// d ##class(PHA.TEST.Function).LENGTH()
ClassMethod LENGTH()
{
    IF $SYSTEM.Version.IsUnicode() {
        SET roman="test"
        WRITE !,$LENGTH(roman)," characters in: ",roman
        SET greek=$CHAR(964,949,963,964)
        WRITE !,$LENGTH(greek)," characters in: ",greek
    }
    ELSE {WRITE "此示例需要Caché的Unicode安装"}
}
DHC-APP>d ##class(PHA.TEST.Function).LENGTH()
 
4 characters in: test
4 characters in: τεστ

在下面的示例中,第一个$LENGTH返回5。这是74000的长度,即指定数字的规范版本。第二个$LENGTH返回8,即字符串“+007.4e4”的长度。

/// d ##class(PHA.TEST.Function).LENGTH1()
ClassMethod LENGTH1()
{
   WRITE !,$LENGTH(+007.4e4)
   WRITE !,$LENGTH("+007.4e4")
}

DHC-APP> d ##class(PHA.TEST.Function).LENGTH1()
 
5
8

在下面的示例中,第一个WRITE返回11var1中的字符数(当然包括空格字符)。第二个WRITE返回2,即使用空格字符作为子字符串定界符的var1中的子字符串数。

/// d ##class(PHA.TEST.Function).LENGTH2()
ClassMethod LENGTH2()
{
    SET var1="HELLO WORLD"
    WRITE !,$LENGTH(var1)
    WRITE !,$LENGTH(var1," ")
}
DHC-APP>d ##class(PHA.TEST.Function).LENGTH2()
 
11
2

下面的示例返回3,即字符串中子字符串的数量,以美元符号($)字符分隔。

DHC-APP>SET STR="ABC$DEF$EFG",DELIM="$"
 
DHC-APP>WRITE $LENGTH(STR,DELIM)
3

如果在字符串中找不到指定的分隔符,则$LENGTH返回1,因为唯一的子字符串是字符串本身。

下面的示例返回0,因为测试的字符串是空字符串。

DHC-APP>SET Nstring = ""
 
DHC-APP>WRITE $LENGTH(Nstring)
0

以下示例显示了分隔符或其字符串为空字符串时返回的值。

/// d ##class(PHA.TEST.Function).LENGTH3()
ClassMethod LENGTH3()
{
    SET String = "ABC"
    SET Nstring = ""
    SET Delim = "$"
    SET Ndelim = ""
    WRITE !,$LENGTH(String,Delim)   ; returns 1
    WRITE !,$LENGTH(Nstring,Delim)  ; returns 1
    WRITE !,$LENGTH(String,Ndelim)  ; returns 0
    WRITE !,$LENGTH(Nstring,Ndelim) ; returns 0
}
DHC-APP>d ##class(PHA.TEST.Function).LENGTH3()
 
1
1
0
0
上一篇下一篇

猜你喜欢

热点阅读