$CHAR
Synopsis
$CHAR(expression,...) $C(expression,...)
パラメータ
expression | 変換される整数値 |
概要
$CHAR は expression で指定した 10 進数 (10 進法) に対応する文字を返します。この文字は 8 ビット (ASCII) 文字あるいは 16 ビット (Unicode) 文字です。8 ビット文字の場合、expression の値は、0 から 255 までの正の整数に評価される必要があります。16 ビット文字の場合、256 から 65535 (16 進数 FFFF) までの整数を指定します。65535 より大きい値は、空の文字列を返します。65536 (16 進数 10000) から 1114111 (16 進数 10FFFF) は、Unicode のサロゲート・ペアを表します。これらの文字は $WCHAR を使用して返されます。8 ビットの Caché インストールでは、$CHAR は 255 よりも大きい expression 値に対して空の文字列を返します。
コンマで区切られたリストとして expression を指定することもできます。その場合、$CHAR はリストの各 expression に対応する文字を返します。
$ASCII 関数は $CHAR と逆の機能を持っています。
パラメータ
expression
式は、整数値、整数値を含む変数の名前、整数値に評価する有効な ObjectScript 式のいずれかにできます。複数の整数値に対して文字を返すためには、式をコンマで区切ったリストを使用します。
$ZHEX 関数を使用して、10 進数 (10 進法) の文字コードではなく、16 進数の文字コードを使用して文字を指定することができます。以下の例では、両方の $CHAR 文がギリシャ文字 pi を返します。
WRITE $CHAR(960),!
WRITE $CHAR($ZHEX("3C0"))
例
以下の例は、FOR ループの中で $CHAR を使用して、65 から 90 までのすべての ASCII コードの文字を出力しています。これらは、大文字のアルファベット文字になります。
FOR i=65:1:90 {
WRITE !,$CHAR(i) }
以下の例では、FOR ループで $CHAR を使用して、日本語のひらがな文字を出力します。
IF $SYSTEM.Version.IsUnicode() {
FOR i=12353:1:12435 {
WRITE !,$CHAR(i) } }
ELSE {WRITE "This example requires a Unicode version of Caché"}
以下の 2 つの例は、複数の expression 値の使用方法です。第 1 の例は "AB" を返し、第 2 の例は "AaBbCcDdEeFfGgHhIiJjKk" を返します。
WRITE $CHAR(65,66),!
FOR i=65:1:75 {
WRITE $CHAR(i,i+32) }
以下の例は、マルチバイト文字の使用方法です。整数 960 に対応する文字は、記号 pi です。
IF $SYSTEM.Version.IsUnicode() {
WRITE $CHAR(960) }
ELSE {WRITE "This example requires a Unicode version of Caché"}
メモ
WRITE コマンドとの $CHAR
WRITE コマンドで文字を出力するために $CHAR を用いる場合、出力文字は特殊変数 $X と $Y の位置を再設定します。これは NULL 文字 (ASCII 0) のときでも True ですが、NULL 文字列 ("") では異なります。原則として、出力不可能な文字を書き込むときの $CHAR の使用は、慎重に行ってください。このような文字は、予想できないカーソルの動きと画面動作をすることがあります。
$CHAR 引数での数値
expression に符号付きの数値を使用できます。Caché は負数を無視し、正もしくは符号なしの数のみを評価します。以下の例で、符号付きの整数を使用した $CHAR は、最初と 3 番目の expression のみを返し、負数である 2 番目の expression を無視します。
WRITE !,$CHAR(65,66,67)
WRITE !,$CHAR(+65,-66,67)
ABC
AC
expression に浮動小数点値を使用できます。Caché は引数の小数部を無視し、整数部のみを評価します。以下の例は、$CHAR が小数部分を無視して、文字コード 65、大文字 A を表す文字を作成しています。
WRITE $CHAR(65.5)
Unicode サポート
Caché の Unicode インストールでは、$CHAR は、10 進数 (10 進法) で表される Unicode 文字をサポートします。Caché の 8 ビット・インストールでは、$CHAR は 255 よりも大きい整数に対して空の文字列を返します。
文字の 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 進数に変換することもできます。
Caché Unicode サポートの詳細は、"Caché ObjectScript の使用法" の "Unicode" を参照してください。
サロゲート・ペア
$CHAR は、サロゲート・ペアを認識しません。サロゲート・ペアは、一部の中国語の文字を表示したり、日本語の JIS2004 標準をサポートするために使用されます。$WISWIDE 関数を使用して、文字列にサロゲート・ペアが含まれているかどうかを判断することができます。$WCHAR 関数は、サロゲート・ペアを認識して、正しく解析します。$CHAR と $WCHAR は、それ以外は同一です。 ただし、$CHAR は通常 $WCHAR より高速なため、サロゲート・ペアが出現しない場合は常に $CHAR が推奨されます。
$WCHAR を $ZWCHAR と混同しないでください。$ZWCHAR は常にペアの文字を解析します。
$CHAR に関連している関数
$ASCII 関数は $CHAR と逆の機能を持っています。文字を対応する数値に変換するために使用します。$ASCII は、Unicode 文字を含むすべての文字を変換します。また、すべての Caché プラットフォームは関連する関数、$ZLCHAR と $ZWCHAR をサポートしています。これらは、$CHAR に似ていますが、ワード (2 バイト) あるいはロングワード (4 バイト) で動作します。$ZISWIDE を使用して、$CHAR の expression 内にマルチバイト ("ワイド") 文字があるかどうかを判断します。