Skip to main content

ObjectScript の文字列

このページでは、ObjectScript の文字列の概要とその操作方法について説明します。

Note:

InterSystems SQL では、文字列リテラルは ObjectScript で使用される二重引用符ではなく、'sample literal string' のように一重引用符で区切られます。ObjectScript と SQL コードの組み合わせを記述する場合は、これを念頭に置くことが重要です。

文字列リテラル

ObjectScript では、文字列リテラルは二重引用符で区切られたゼロ個以上の文字に設定されます。例えば、以下のようになります。

"sample literal string"

値には、空白文字、制御文字、入力できない Unicode 文字を含め、任意の文字を含めることができます。

文字列に二重引用符を含めるには、2 つの二重引用符を間にスペースを入れずに使用します。

"sample literal string with ""quoted"" text"

許可される文字列の長さには上限があります ("文字列長の制限" を参照してください)。

以下の例は、8 ビット文字による文字列、16 ビット Unicode 文字 (ギリシャ文字) による文字列、および 8 ビット文字と 16 ビット Unicode 文字を組み合わせた文字列を示しています。

  DO AsciiLetters
  DO GreekUnicodeLetters
  DO CombinedAsciiUnicode
  RETURN
AsciiLetters()
  SET a="abc"
  WRITE a
  WRITE !,"the length of string a is ",$LENGTH(a)
  ZZDUMP a
  QUIT
GreekUnicodeLetters()
  SET b=$CHAR(945)_$CHAR(946)_$CHAR(947)
  WRITE !!,b
  WRITE !,"the length of string b is ",$LENGTH(b)
  ZZDUMP b
  QUIT
CombinedAsciiUnicode()
  SET c=a_b
  WRITE !!,c
  WRITE !,"the length of string c is ",$LENGTH(c)
  ZZDUMP c
  QUIT

出力不能文字と Unicode 文字

文字列を作成するときに、入力できない文字を含めることが必要な場合があります。これらには、$CHAR 関数を使用します。整数を指定すると、$CHAR は、対応する ASCII または Unicode 文字を返します。一般的な使用法は以下のとおりです。

  • $CHAR(9) はタブです。

  • $CHAR(10) は改行です。

  • $CHAR(13) はキャリッジ・リターンです。

  • $CHAR(13,10) はキャリッジ・リターンと改行のペアです。

関数 $ASCII は、指定された文字の ASCII 値を返します。

同様に、以下の例に示すように、$CHAR 関数を使用して、(キーボードによっては) 入力できない Unicode 文字を指定することができます。

  SET greekstr=$CHAR(952,945,955,945,963,963,945)
  WRITE greekstr
Note:

出力不能文字の表示方法は、ディスプレイ・デバイスにより決定されます。例えば、ターミナルとブラウザでは、改行文字や他のポジショニング文字の表示方法が異なります。さらに、ブラウザが異なれば、ポジショニング文字 $CHAR(11) および $CHAR(12) の表示方法も異なります。

NULL 文字列と NULL 文字

2 つの引用符文字 ("") で表される空の文字列は、NULL 文字列と呼ばれます。NULL 文字列は、定義済みの値と見なされます。つまり、変数が空の文字列に設定された場合、その変数は定義済みと見なされます。列の文字列の長さは 0 です。

以下の例にあるように、NULL 文字列は、ASCII NULL 文字 ($CHAR(0)) で構成した文字列とは異なります

  SET x=""
  WRITE "string=",x," length=",$LENGTH(x)," defined=",$DATA(x)
  ZZDUMP x
  SET y=$CHAR(0)
  WRITE !!,"string=",y," length=",$LENGTH(y)," defined=",$DATA(y)
  ZZDUMP y

文字列連結

連結演算子を使用して、2 つの文字列を 1 つに結合できます。

 SET a = "Inter"
 SET b = "Systems"
 SET string = a_b
 WRITE string

InterSystems IRIS エンコード文字列 (ビット文字列リスト構造文字列、JSON 文字列) には、連結演算子に関する制限があります。詳細は、"連結エンコード文字列" を参照してください。

数値を結合する際は、他の事項も考慮する必要があります。"数字の連結" を参照してください。

文字列等値

等号 (=) および不等号 ('=) の演算子を使用して、2 つの文字列を比較できます。文字列の等値比較では大文字と小文字が区別されます。これらの演算子を使用して、文字列を数字と比較する際には注意が必要です。それは、この比較が文字列比較であり、数値比較ではないからです。したがって、キャノニック形式の数字を含む文字列のみが、対応する数字と等価になります。("-0" はキャノニック形式の数ではありません。)詳細は、以下の例を参照してください。

  WRITE "Fred" = "Fred",!  // TRUE
  WRITE "Fred" = "FRED",!  // FALSE
  WRITE "-7" = -007.0,!    // TRUE
  WRITE "-007.0" = -7,!    // FALSE
  WRITE "0" = -0,!         // TRUE
  WRITE "-0" = 0,!         // FALSE
  WRITE "-0" = -0,!        // FALSE

文字列の等値比較では大文字と小文字が区別されるため、ユース・ケースによっては、まず $ZCONVERT 関数を使用して、文字列をすべて大文字またはすべて小文字に変換することが適切な場合があります。この関数は、文字ではない符号や記号には影響しません。小文字の文字形式しか有していない文字も多少あります。例えば、ドイツ語の eszett 文字 ($CHAR(223)) は小文字としてのみ定義されています。これを大文字に変換しても、結果は同じ小文字となります。このため、英数字文字列をすべて大文字/小文字に変換する場合、小文字に変換することが常に推奨されます。

<、>、<=、>= などの演算子を使用して、文字列比較を実行することはできません。これらの演算子は数値として文字列を扱い、常に数値比較を実行します。

他の文字列関係演算子

等価演算子と不等価演算子のほかに、ObjectScript にはオペランドを文字列として解釈するその他の演算子が用意されています。それらは、否定論理演算子 (') を先頭に付けて、論理結果を反転することができます。ObjectScript は、以下の文字列関係演算子を提供します。

包含 ([)

右のオペランドの一連の文字が、左の文字の部分文字列であるかを判断します。左のオペランドが、右のオペランドの文字列を含んでいる場合、結果は True (1) となります。左のオペランドが、右のオペランドの文字列を含んでいない場合、結果は False (0) となります。右のオペランドが NULL 文字列の場合、結果は常に True となります。

以下に例を示します。

USER>SET L="Steam Locomotive"

USER>SET S="Steam"

USER>WRITE L[S
1

"包含 ([)" および "非包含 ('[)" のリファレンス・ページを参照してください。

後続 (])

左のオペランドの文字が、ASCII 文字順で右のオペランドの文字の後に来るかどうかを判断します。後続関係演算子は、両方の文字列が、それぞれの最左端の文字から始まるものとします。

以下に例を示します。

USER>WRITE "LAMPOON"]"LAMP"
1

"後続 (])" および "非後続 ('])" のリファレンス・ページを参照してください。

前後関係 (]])

左のオペランドが数値添え字の照合順序で右のオペランドの後に順番に並んでいるかを判定します。数値照合順序では、NULL 文字列が最初に置かれます。次に負数から数値順に並べたキャノニック形式の数値、ゼロ、整数と続き、最後に数値以外の値が置かれます。

以下に例を示します。

USER>WRITE 122]]2
1

"前後関係 (]])" および "非前後関係 (']])" のリファレンス・ページを参照してください。

パターン・マッチング演算子 (?)

ObjectScript のパターン・マッチング演算子は、左オペランドの文字が、その右オペランドのパターンと正確に一致しているかどうかを判断します。

以下の例では、いくつかの文字列をテストし、有効な米国社会保障番号かどうかを確認します。

USER>SET test1="123-45-6789"

USER>SET test2="123-XX-6789"

USER>WRITE test1 ? 3N1"-"2N1"-"4N
1
USER>WRITE test2 ? 3N1"-"2N1"-"4N
0

"パターン・マッチング (?)" のリファレンス・ページを参照してください。

Note:

ObjectScript では、多くのソフトウェア・ベンダよりサポートされる (バリアントを用いた) パターン・マッチ構文である正規表現をサポートします。正規表現は、$LOCATE および $MATCH 関数と %Regex.MatcherOpens in a new tab クラスのメソッドで使用できます。詳細は、"正規表現" のリファレンス・ページを参照してください。

これらのパターン・マッチング・システムは完全に別個のものであり、異なるパターンとフラグを持つ異なる構文を使用します。

よく使用される文字列関数

文字列に対する演算に最もよく使用される ObjectScript 関数には、次のようなものがあります。

  • $LENGTH 関数は、文字列の文字数を返します。以下はそのコードの例です。

     WRITE $LENGTH("How long is this?")

    これは、文字列の長さ、17 を返します。

  • $JUSTIFY は、文字列の左側をスペース文字で埋め、右揃えした文字列を返します (数値演算も実行できます)。以下はコードの例です。

     WRITE "one",!,$JUSTIFY("two",8),!,"three"

    これは、文字列 two の位置を 8 文字に調整し、返します。

    one
         two
    three
    
  • $ZCONVERT これは、文字列の形式を変換します。大文字と小文字の変換 (大文字変換、小文字変換、タイトル文字変換など) とコード変換 (さまざまな形式でコード化された文字間の変換) をサポートします。以下はコードの例です。

     WRITE $ZCONVERT("cRAZy cAPs","t")

    これは、以下を返します。

    CRAZY CAPS
    
  • $FIND 関数は、文字列を部分文字列で検索し、その部分文字列の次にある文字の位置を返します。以下はコードの例です。

     WRITE $FIND("Once upon a time...", "upon")

    これは、“upon” の直後の文字位置である 10 を返します。

  • $TRANSLATE 関数は、文字列内で文字単位の置換を行います。以下はコードの例です。

     SET text = "11/04/2008"
     WRITE $TRANSLATE(text,"/","-")

    これは、日付のスラッシュをハイフンに置き換えます。

  • $REPLACE 関数は、文字列内で文字列単位の置換を行います。演算の対象とする文字列の値は変更しません。例えば、次のコードは 2 つの異なる処理を行います。

     SET text = "green leaves, brown leaves"
     WRITE text,!
     WRITE $REPLACE(text,"leaves","eyes"),!
     WRITE $REPLACE(text,"leaves","hair",15),!
     WRITE text,!

    最初の呼び出しの $REPLACE では、文字列 leaves を文字列 eyes に置き換えます。2 番目の呼び出しの $REPLACE では、(4 番目の引数で指定された位置である) 15 番目の文字の前にあるすべての文字を破棄し、文字列 leaves を文字列 hair に置き換えます。text 文字列の値は、どの $REPLACE 呼び出しでも変更されません。

  • $EXTRACT 関数は、文字列の中で指定の位置から部分文字列を返します。以下はコードの例です。

     WRITE $EXTRACT("Nevermore"),$EXTRACT("prediction",5),$EXTRACT("xon/xoff",1,3)

    これは、3 つの文字列を返します。1-引数形式は文字列の最初の文字、2-引数形式は文字列から指定された文字、3-引数形式は指定の文字から始まり指定の文字で終わる部分文字列をそれぞれ返します。ここでは改行がないため、以下の値を返します。

    Nixon
    

関連項目

FeedbackOpens in a new tab