第二十五章 Caché 函數大全 $LENGTH 函數 第二十五章 Caché 函數大全 $LENGTH 函數 大綱 描述

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

返回字符串中的字符數或帶分隔符的子字符串。

大綱

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

參數

  • expression 目標字符串。它可以是數值,字符串文字,變量名稱或任何可解析爲字符串的有效表達式。
  • delimiter 可選-在目標字符串中劃分單獨的子字符串的字符串。它可以是變量名,數值,字符串文字或任何可解析爲字符串的有效表達式。

描述

$LENGTH根據使用的參數返回指定字符串中的字符數或指定字符串中帶分隔符的子字符串數。請注意,長度計算字符數;8位字符和16位寬(Unicode)字符都被視爲一個字符。

  • $LENGTH(expression)返回字符串中的字符數。如果表達式爲空字符串,則$LENGTH返回0。如果表達式爲數字表達式,則在確定其長度之前將其轉換爲規範形式。如果expression是字符串數字表達式,則不執行任何轉換。如果expression是$DOUBLEINF-INFNAN,則返回的長度分別爲3、4和3。

此語法可以與$EXTRACT函數一起使用,該函數按位置查找子字符串並返回該子字符串的值。

  • $LENGTH(expression,delimiter)返回字符串中子字符串的數量。 $LENGTH返回由指定的定界符彼此分隔的子字符串數。此數字始終等於字符串中定界符的數量加一。

此語法可以與$PIECE函數一起使用,該函數通過定界符查找子字符串並返回該子字符串值。

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

編碼字符串

Caché支持包含內部編碼的字符串。由於這種編碼,$LENGTH不應用於確定字符串的數據內容。

  • $LENGTH不應用於使用$LISTBUILD$LIST創建的List結構字符串。因爲Caché List字符串已編碼,所以返回的長度不會有意義地指示列表元素中的字符數。唯一的例外是$LIST的一參數形式和二參數形式,它們採用編碼的Caché List字符串作爲輸入,但輸出單個List元素值作爲標準字符串。可以使用$LISTLENGTH函數確定已編碼列表字符串中子字符串(列表元素)的數量。
  • $LENGTH不應用於位字符串。由於對Caché位字符串進行了編碼,因此返回的長度不會有意義地指示位字符串中的位數。可以使用$BITCOUNT函數,該函數返回字符串中的位數。
  • $LENGTH不應用於JSON字符串。通過將變量設置爲JSON對象或JSON數組分配的值是對象引用。因此,該變量值的長度將是對象引用的長度,該長度與JSON字符串中編碼的數據的長度無關。

代理對

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