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?

$CHAR

式の整数値を、対応した ASCII または Unicode に変換します。

Synopsis

$CHAR(expression,...)
$C(expression,...)

パラメータ

expression 変換される整数値

概要

$CHARexpression で指定した 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 が推奨されます。

Note:

$WCHAR$ZWCHAR と混同しないでください。$ZWCHAR は常にペアの文字を解析します。

$CHAR に関連している関数

$ASCII 関数は $CHAR と逆の機能を持っています。文字を対応する数値に変換するために使用します。$ASCII は、Unicode 文字を含むすべての文字を変換します。また、すべての Caché プラットフォームは関連する関数、$ZLCHAR$ZWCHAR をサポートしています。これらは、$CHAR に似ていますが、ワード (2 バイト) あるいはロングワード (4 バイト) で動作します。$ZISWIDE を使用して、$CHAR の expression 内にマルチバイト ("ワイド") 文字があるかどうかを判断します。

関連項目

FeedbackOpens in a new tab