count は、合計文字数です。例えば、$CHAR(5,1,65,66,67) や $CHAR(5,1)_"ABC" です。
flag は、string をどのように表すかを指定する整数です。flag の有効な値には、1、2、4、5、6、7、8、9、12、および 13 があります。これらの flag の解釈は、ASCII におけるこの非表示文字の通常の解釈とは関係ありません。
-
flag=1、flag=12、および flag=13 は、string のリテラル値をリスト要素として返します。
-
flag=2 は、count が偶数の場合にのみ有効です。これは、string から得られた 1 つ以上のワイド Unicode 文字 (多くの場合は 1 つ以上の中国語の文字) が含まれるリストを返します。
-
flag=4 は、文字の正の ASCII 数値コードをリスト要素として返します。flag=4 は、count > 10 の場合には使用できません。
-
flag=5 は、文字の負の整数の ASCII 数値コードをリスト要素として返します。flag=5 は、count > 10 の場合には使用できません。
-
flag=6 は、string から得られた正の整数をリスト要素として返します。
-
$CHAR(3,6,n) は、常に $lb(0) を返します。
-
count > 3 の場合、$CHAR(count,6,string) は、ASCII 数値から得られた (通常は) 大きい正の整数を返します。末尾のゼロの数は string の最初の文字の ASCII 値に対応し、先頭の数値は文字列の 2 番目の文字の ASCII 値に対応します。例えば、$CHAR(4,6,0,7) は $lb(7) を返し、$CHAR(4,6,3,7) は $lb(7000) を返します。
flag=6 は、count > 11 の場合には使用できません。
-
flag=7 は、string から得られた負の整数をリスト要素として返します。
-
$CHAR(3,7,n) は、n の値に対応する数のゼロが付いた負の数値を返します。0 = –1、1 = –10、2= –100、3 = –1000 のようになります。
-
count > 3 の場合、$CHAR(count,7,string) は、(通常は) 大きい負の整数を返します。末尾のゼロの数は、string の最初の文字の ASCII 値に対応します。
flag=7 は、count > 11 の場合には使用できません。
-
flag=8 は、$DOUBLE(x) を返します。x は小さい数です。flag=8 は、count > 6 の場合には使用できません。
-
flag=9 は、$DOUBLE(x) を返します。x は大きい数です。flag=9 は、count > 10 の場合には使用できません。
string は、count - 2 文字の数値または文字列です。例えば、3 文字の string は、$CHAR(5,flag,65,66,67) または $CHAR(5,flag)_"ABC" として表すことができます。string の値はリスト要素になり、その値は flag の指定に従って表されます。
詳細は、"$LISTBUILD" および "$LISTVALID" を参照してください。
$CHAR 引数での数値
expression に符号付きの数値を使用できます。InterSystems IRIS は負数を無視し、正もしくは符号なしの数のみを評価します。以下の例で、符号付きの整数を使用した $CHAR は、最初と 3 番目の expression のみを返し、負数である 2 番目の expression を無視します。
WRITE !,$CHAR(65,66,67)
WRITE !,$CHAR(+65,-66,67)
ABC
AC
expression に浮動小数点値を使用できます。InterSystems IRIS は引数の小数部を無視し、整数部のみを評価します。以下の例は、$CHAR が小数部分を無視して、文字コード 65、大文字 A を表す文字を作成しています。
WRITE $CHAR(65.5)
Unicode サポート
$CHAR は、10 進数 (10 進法) で表される Unicode 文字をサポートします。
文字の Unicode 値は、通常 0 ~ 9 と A ~ F を使用する 16 進数の 4 桁の数字で表されます。しかし、ObjectScript 言語の基本関数は、通常 16 進数ではなく、10 進数値の ASCII コードによる文字を識別します。
したがって、$CHAR 関数は Unicode 標準が推奨する 16 進数値の代わりに、$ASCII 関数は入力文字の 10 進数の Unicode 値を返すことによって、Unicode コード化をサポートします。$CHAR($ZHEX("hexnum")) のように、$ZHEX 関数で引用符を使用して、16進数の Unicode 値を指定することができます。hexnum = $ZHEX(decnum) のように、引用符なしで $ZHEX を使用して、10 進数を 16 進数に変換することもできます。
詳細は、"ObjectScript の使用法" の "Unicode" を参照してください。
サロゲート・ペア
$CHAR は、サロゲート・ペアを認識しません。サロゲート・ペアは、一部の中国語の文字を表示したり、日本語の JIS2004 標準をサポートするために使用されます。$WISWIDE 関数を使用して、文字列にサロゲート・ペアが含まれているかどうかを判断することができます。$WCHAR 関数は、サロゲート・ペアを認識して、正しく解析します。$CHAR と $WCHAR は、それ以外は同一です。 ただし、$CHAR は通常 $WCHAR より高速なため、サロゲート・ペアが出現しない場合は常に $CHAR が推奨されます。
Note:
$WCHAR を $ZWCHAR と混同しないでください。$ZWCHAR は常にペアの文字を解析します。
関連項目