Skip to main content

$ZCONVERT (ObjectScript)

変換モードとオプションの引数を指定すると、指定した文字列の変換された値を返します。

構文

$ZCONVERT(string,mode,trantable,handle) 
$ZCVT(string,mode,trantable,handle)

引数

引数 説明
string 変換する文字列。引用符付きの文字列として指定します。文字列は、値、変数、式として指定できます。
mode 変換モードを指定する文字コード。大文字小文字変換または入力/出力エンコーディングのいずれかのタイプになります。引用符付きの文字列として mode を指定します。
trantable オプション使用する変換テーブル。整数または引用符で囲まれた文字列によって指定します。
handle オプション — 文字列値を持つ添字なしのローカル変数。$ZCONVERT の複数の呼び出しのために使用されます。handle は、$ZCONVERT の終了時に変換できなかった string の残り部分を格納しており、次の $ZCONVERT 呼び出しにこの残り部分を提供します。

概要

$ZCONVERT は、文字列の形式を変換します。変換の種類は、使用する引数によって決まります。

  • 引数が 2 つの形式は、入力文字列の大文字/小文字を変更します。

  • 引数が 3 つの形式は、エンコードを変更するか、エスケープまたはエスケープ解除を実行します。

  • 引数が 4 つの形式では、きわめて長い文字列を処理するために、関数を繰り返し呼び出すことができます。

引数が 2 つの形式 : 大小文字変換

引数が 2 つの形式の $ZCONVERT は、入力文字列と大文字/小文字のみが異なる新しい文字列を返します。以下に例を示します。

USER>set string="abcdef"
 
USER>write $zconvert(string,"u")
ABCDEF
USER>write $zconvert(string,"l")
abcdef

引数が 2 つの形式の構文は以下のとおりです。

$ZCONVERT(string,mode) 
$ZCVT(string,mode)

mode 引数は、以下のいずれかに評価される必要があります。

L、l

小文字変換。string 内のすべての文字を小文字に変換します。変換は Unicode 文字および ASCII 文字で有効です。アルファベットの中には、小文字の形式しかない文字が少数ですが存在します。例えば、ドイツ語の eszett 文字 ($CHAR(223)) は小文字としてのみ定義されています。これを大文字に変換しようとしても、結果は同じ小文字になります。

  IF $ZCONVERT($CHAR(223),"U")=$ZCONVERT($CHAR(223),"L") {
      WRITE "uppercase and lowercase letter are the same" }
  ELSE {WRITE "uppercase and lowercase are different" }

このため、英数字文字列をすべて大文字/小文字に変換する場合、小文字に変換することが常に推奨されます。

"システム・マクロ" の "$$$LOWER" も参照してください。

U、u

大文字変換。string 内のすべての文字を大文字に変換します。変換は Unicode 文字および ASCII 文字で有効です。以下の例では、ギリシャ文字を小文字から大文字に変換します。

   FOR i=945:1:969 {WRITE $ZCONVERT($CHAR(i),"U")}

以下の例のように、$TRANSLATE 関数を使用して、同様の大文字/小文字の変換を実行できます。

  WRITE $TRANSLATE(text,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz")

"システム・マクロ" の "$$$UPPER" も参照してください。

T、t

タイトル文字変換。string 内のすべての文字をタイトル文字に変換します。タイトル文字は、1 つの文字に小文字、大文字、およびタイトル文字の 3 つの形式があるアルファベット文字 (主に東ヨーロッパ言語) についてのみ有効です。その他すべての文字については、タイトル文字変換は大文字変換と同じです。

タイトル文字 ("T") モードは、文字列内のすべての文字をタイトル文字形式に変換します。タイトル文字は、単語または文字列の位置に基づいて選択的に文字を大文字に変換しません。タイトル文字は、タイトルの単語の先頭の文字を表す文字のタイプです。標準のラテン文字ではほとんどの場合、タイトル文字は大文字と同じです。

一部の言語 (例えばクロアチア語) では、特定の文字は 2 つの文字で表されます。例えば、クロアチア語のアルファベットで、"lj" は 1 文字です。この文字には、小文字 "lj"、大文字 "LJ"、およびタイトル文字 "Lj" の 3 つの形式があります。このタイプの文字変換には、$ZCONVERT タイトル文字変換を使用します。

W または w

単語変換。string 内の各単語の最初の文字を大文字に変換します。空白スペース、引用符 (")、アポストロフィ (')、開始の括弧 (() が前に付く文字は、いずれも単語の最初の文字と見なされます。単語変換は、その他のすべての文字を小文字に変換します。単語変換は、ロケール固有です。英語の場合、前述の構文規則が他の言語ロケールと異なる可能性があります。

“W” および “S” モードは、空白でない文字が単語の最初の文字どうか、または文の最初の文字かどうかを判別します。その文字 (表意文字) が文字 (アルファベット文字) の場合は、大文字に変換されます。その他のすべての文字は小文字に変換されます。大小文字変換は、任意のアルファベットの文字に対して行われます。以下の例では、ギリシャ文字の変換を示します ($CHAR(945) は小文字のアルファ、$CHAR(913) は大文字のアルファ)。

   SET greek=$CHAR(945,946,947,913,914,915)
   WRITE $ZCONVERT(greek,"W")

ただし、単語や文を構成要素を決める規則は、ロケールによって異なります。例えば、以下の例では、スペイン語の反転した感嘆符 $CHAR(161) を使用します。既定 (英語) のロケールでは、この文字を文または単語の先頭として認識しません。この例では、spanish のすべての文字は小文字に変換されます。

   SET spanish=$CHAR(161)_"ola MuNdO! "_$CHAR(161)_"olA!"
   SET english="hElLo wOrLd! heLLo!"
   WRITE !,$ZCONVERT(english,"S")
   WRITE !,$ZCONVERT(spanish,"S")
S または s

文変換。string 内の各文の最初の文字を大文字に変換します。string の最初の空白以外の文字、およびピリオド (.)、疑問符 (?)、感嘆符 (!) が前に付く文字は、いずれも文の最初の文字と見なされます (前にある句読点文字と文字の間の空白は無視されます)。この文字 (表意文字) が文字 (アルファベット文字) の場合、大文字に変換されます。文変換は、その他のすべての文字 (アルファベット文字) を小文字に変換します。文変換は、ロケール固有です。英語の場合、前述の構文規則が他の言語ロケールと異なる可能性があります。

W モードの説明を参照してください。

A または a

文字列からアクセントを削除します。

AU または au

文字列からアクセントを削除して、大文字に変換します。

AL または al

文字列からアクセントを削除して、小文字に変換します。

ASCII コードでないものやカスタム変換などの、大小文字変換のオプションの詳細は、"各国言語サポートのシステム・クラスの使用法" を参照してください。

引数が 3 つの形式 : エンコード変換、エスケープ、エスケープ解除

引数が 3 つの形式の $ZCONVERT は、特定の状況 (URL 内など) で使用するために、別の方法でエンコードされた、またはエスケープあるいはエスケープ解除された、新しい文字列を返します。以下の例では、URL 内で使用するために %Library.String を変換します。

USER>set string="%Library.String"
 
USER>write $zconvert(string,"o","URL")
%25Library.String

引数が 3 つの形式の構文は以下のとおりです。

$ZCONVERT(string,mode,trantable) 
$ZCVT(string,mode,trantable)

mode 引数は、以下のいずれかに評価される必要があります。

O、o

入力文字列を trantable で指定されたエンコードまたは形式変換します。

I または I

入力文字列を trantable で指定されたエンコードまたは形式から変換します。

trantable 引数は、次のいずれかになります。

  • 入出力変換テーブルを指定する大文字の文字列値。前述の例で、"URL" は変換テーブルです。リストおよび詳細は、"変換テーブル" を参照してください。

  • 入出力変換テーブルを指定する文字列値は、NLS ロケールによって定義されます。例えば、Latin2 または CP1252 などです。リストおよび詳細は、"変換テーブル" を参照してください。

  • ユーザ定義の入出力変換テーブルを指定する文字列値。指定されたテーブルは、ロケールで定義し、1 つあるいは 2 つの変換テーブルを示すことができます。指定されたテーブルを使用して、独自のシステムへの (あるいはデバイスからの) エンコードを定義することができます。

  • NULL 文字列 ("")。この場合、既定のプロセス入出力変換テーブルを使用します (同様の機能については、%NLS ユーティリティの $$GetPDefIO^%NLS() 関数を参照してください)。

  • プロセス入出力変換オブジェクト (変換ハンドル) を指定する整数値。使用可能な値は、0 ~ 3 です (0 は現在のプロセス入出力変換オブジェクトを表します)。

“I” 変換では、string%4B (文字 “K”) などの 16 進数文字列になります。16 進数文字列は大文字小文字を区別しません。

ZZDUMP を使用して、文字列の 16 進エンコーディングを表示できます。$CHAR を使用して、文字 (または文字列) をその 10 進数 (10進法) エンコーディングで指定することができます。$ZHEX を使用して、16 進数を 10 進数に、または 10 進数を 16 進数に変換することができます。変換された値が出力不能文字である場合、InterSystems IRIS はそれを NULL 文字として表示します。変換された文字をターゲット・デバイスが表示できない場合、InterSystems IRIS はその出力不能文字を疑問符 (?) 文字に置き換えます。

4 つの引数形式 : 入力/出力文字列

引数が 4 つの形式の $ZCONVERT では、きわめて長い文字列を変換する方法として、関数を繰り返し呼び出すことができます。引数が 4 つの形式の構文は以下のとおりです。

$ZCONVERT(string,mode,trantable,handle) 
$ZCVT(string,mode,trantable,handle)

handle 引数は、$ZCONVERT が実行の最初に読み取り、実行の最後に書き込むローカル変数です。これは、連続する $ZCONVERT 関数呼び出しの間に情報を保持するために使用されます。これは次のように使用できます。文字列を string の先頭に連結して、極端に長い文字列を変換します。

文字列を string の先頭に連結するには、$ZCONVERT を呼び出す前に handle を設定します。

   SET handle="the "
   WRITE $ZCVT("quick brown fox","O","URL",handle),!
   /*  the%20quick%20brown%20fox  */
   WRITE $ZCVT("quick brown fox","O","URL",handle),!
   /*  quick%20brown%20fox  */

$ZCONVERT は、実行完了時に handle をリセットします。前述の例では、handle は空の文字列にリセットされています。

handle 引数は、入力変換のために使用できます。handle の指定が役に立つのは、文字の部分セット (ストリーム読み取りなど) を扱う際にマルチバイト文字シーケンスを処理する場合です。これらのケースでは、$ZCONVERThandle 引数を使用して、マルチバイト・シーケンスの先頭バイトである可能性のある部分文字シーケンスを保持します。$ZCONVERT の終了時に、完全な変換単位を構成しない入力文字がバッファ内に残っている場合は、これらの残り文字は handle に格納されて返されます。次の $ZCONVERT の開始時に、handle にデータが格納されている場合は、これらの残り文字は通常の入力データの前に付加されます。これは、以下の例に示すように UTF8 変換で使用する場合に特に有用です。

  SET handle=""
  WHILE 'stream.AtEnd() {
     WRITE $ZCONVERT(stream.Read(20000),"I","UTF8",handle)
  } 

極端に長い文字列を変換するには、$ZCONVERT を複数回呼び出して、1 つ以上の文字列の変換を実行する必要があります。$ZCONVERT には、string の変換されていない残りの部分を保持するために、オプションの handle 引数があります。handle 引数を指定すると、$ZCONVERT が呼び出されるたびに更新されます。文字列変換が完了すると、$ZCONVERThandle に空の文字列を設定します。

   SET handle=""
   SET out = $ZCVT(hugestring,"O","HTML",handle)
   IF handle '= "" {
     SET out2 = $ZCVT(handle,"O","HTML",handle)
     WRITE "Converted string is: ",out,out2  }
   ELSE {
     WRITE "Converted string is: ",out }

以下の例は、"HELLO" を返します。

   WRITE $ZCONVERT("Hello","U")

以下の例は、"hello" を返します。

   WRITE $ZCVT("Hello","L")

以下の例は、"HELLO" を返します。

   WRITE $ZCVT("Hello","T")

以下の例は、連結演算子 (_) を使用して、アクセント記号付き文字を付加し、大小文字変換を実行します。

   WRITE "TOUCH"_$CHAR(201),!, $ZCVT("TOUCH"_$CHAR(201),"L")

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

TOUCHÉ

touché

以下の例は、文字列内の山括弧を出力するために HTML エスケープ文字に変換し、“<TAG>” を返します。

   WRITE $ZCVT("<TAG>","O","HTML")

出力デバイスにより、この山括弧の表示方法が異なります。このプログラムをここで実行したり、ターミナル・プロンプトで実行してみてください。

以下の例は、$ZCONVERT が、変換された文字を表示できない場合にどのように ? 文字に置き換えるかを示しています。この例では、UTF8 および現在のプロセス入出力変換オブジェクト (trantable 0) のどちらの変換も $CHAR(63) を表示していますが、これは実際には ? 文字です。UTF8 は、$CHAR(127) を超える変換された文字は表示できません。変換テーブル 0 は、$CHAR(255) を超える変換された文字は表示できません。

  FOR i=1:1:300 {IF $ZCONVERT($CHAR(i),"I","UTF8") '= "?"
                   { CONTINUE }
                  ELSE {WRITE "UTF8 ",i,"=",$ZCONVERT($CHAR(i),"I","UTF8")}
                  IF $ZCONVERT($CHAR(i),"I",0)="?"
                   {WRITE " trantable 0 ",i,"=",$ZCONVERT($CHAR(i),"I",0),!}
                 ELSE {WRITE !}
                 }

関連項目

FeedbackOpens in a new tab