Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

$LENGTH

文字列内の文字数または区切られた部分文字列の数を返します。

Synopsis

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

パラメータ

expression ターゲット文字列。数値、文字列リテラル、変数名、または文字列に解決される任意の有効な式を指定できます。
delimiter オプション — ターゲット文字列にある部分文字列の境界を定める文字列。変数名、数値、文字列リテラル、または文字列に解決される任意の有効な式を指定できます。

概要

$LENGTH は使用されるパラメータによって、指定した文字列内の文字数あるいは指定した文字列内の区切られた部分文字列の数を返します。長さは文字数をカウントします。8 ビット文字および 16 ビットのワイド (Unicode) 文字は、両方とも 1 文字としてカウントされます。Caché Unicode サポートの詳細は、"Caché ObjectScript の使用法" の "Unicode" を参照してください。

  • $LENGTH(expression) は、文字列の文字数を返します。expression が NULL 文字列の場合、$LENGTH は 0 を返します。expression が数値式の場合、その長さを決定する前にキャノニック形式に変換されます。expression が文字列数値式の場合、変換は実行されません。expression$DOUBLE の INF 値、-INF 値、または NAN 値の場合は、返される長さは、それぞれ 3、4、および 3 になります。

    この構文は、位置を基準に部分文字列を特定し、その部分文字列値を返す $EXTRACT 関数と共に使用できます。

  • $LENGTH(expression,delimiter) は、文字列内の部分文字列数を返します。$LENGTH は、指定された delimiter で相互に分離されている部分文字列数を返します。この数は常に文字列内の区切り文字数に 1 を加えたものです。

    この構文は、区切り文字を基準に部分文字列を特定し、その部分文字列値を返す $PIECE 関数と共に使用できます。

    delimiter が NULL 文字列の場合は、$LENGTH は 0 を返します。区切り文字がその他の有効な文字列リテラルで、文字列が NULL 文字列の場合は、$LENGTH は 1 を返します。

エンコードされた文字列

Caché は、内部的なエンコードを含む文字列をサポートしています。このエンコードのため、$LENGTH を使用して文字列のデータ内容を調べることはできません。

  • $LENGTH は、$LISTBUILD または $LIST を使用して作成されたリスト構造文字列には使用できません。Caché のリスト文字列はエンコードされているため、返される長さはリスト要素内の文字列の数を有意に示していません。唯一の例外は、入力値としてエンコードされた Caché リスト文字列を取りながら、標準の文字列として 1 つのリスト要素の値を出力する、$LIST の 1-引数形式と 2-引数形式です。エンコードされたリスト文字列の部分文字列 (リスト要素) の数を調べるには、$LISTLENGTH 関数を使用できます。

  • $LENGTH は、ビット文字列には使用できません。Caché のビット文字列はエンコードされているため、返される長さはビット文字列内のビット数を有意に示していません。文字列内のビット数を返す $BITCOUNT 関数を使用できます。

  • $LENGTH は、JSON 文字列には使用できません。変数を JSON オブジェクトまたは JSON 配列に設定することによって割り当てられる値は、オブジェクト参照です。したがって、その変数値の長さはオブジェクト参照の長さであり、JSON 文字列にエンコードされたデータの長さとは関係ありません。

サロゲート・ペア

$LENGTH は、サロゲート・ペアを認識しません。サロゲート・ペアは、一部の中国語の文字を表示したり、日本語の JIS2004 標準をサポートするために使用されます。$WISWIDE 関数を使用して、文字列にサロゲート・ペアが含まれているかどうかを判断することができます。$WLENGTH 関数は、サロゲート・ペアを認識して、正しく解析します。$LENGTH$WLENGTH は、それ以外は同一です。ただし、$LENGTH は通常 $WLENGTH より高速なため、サロゲート・ペアが出現しない場合は常に $LENGTH が推奨されます。

以下の例では、両方の $LENGTH 関数は、文字列の文字数 4 を返します。

   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 "This example requires a Unicode installation of Caché"}

以下の例では、最初の $LENGTH 関数は 5 を返します。これは、指定した数値のキャノニック・バージョンである、長さ 74000 です。2 番目の $LENGTH は、文字列 “+007.4e4” の長さ 8 を返します。

   WRITE !,$LENGTH(+007.4e4)
   WRITE !,$LENGTH("+007.4e4")

以下の例では、最初の WRITEvar1 内の文字数 11 を返します (スペース文字も含む)。2 番目の WRITE は、部分文字列の区切り文字としてスペース文字を使用した場合の var1 内の部分文字列数 2 を返します。

   SET var1="HELLO WORLD"
   WRITE !,$LENGTH(var1)
   WRITE !,$LENGTH(var1," ")

以下の例は、ドル記号 ($) で区切られた文字列内の部分文字列数 3 を返します。

   SET STR="ABC$DEF$EFG",DELIM="$"
   WRITE $LENGTH(STR,DELIM)

指定された区切り文字が文字列内に見つからない場合は、文字列全体が 1 つの部分文字列となるため、$LENGTH は 1 を返します。

以下の例は、テストされた文字列が NULL 文字列なので、0 を返します。

   SET Nstring = ""
   WRITE $LENGTH(Nstring)

以下の例は、区切り文字やその文字列が NULL 文字列のときに返される値を示しています。

   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

関連項目

FeedbackOpens in a new tab