Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

$CHAR (ObjectScript)

式の整数値を、対応した 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 を使用して返されます。

コンマで区切られたリストとして 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 を使用して、日本語のひらがな文字を出力します。

  FOR i=12353:1:12435 {
     WRITE !,$CHAR(i) }

以下の 2 つの例は、複数の expression 値の使用方法です。第 1 の例は "AB" を返し、第 2 の例は "AaBbCcDdEeFfGgHhIiJjKk" を返します。

  WRITE $CHAR(65,66),!
  FOR i=65:1:75 { 
     WRITE $CHAR(i,i+32) }

$CHAR および WRITE

WRITE コマンドで文字を出力するために $CHAR を用いる場合、出力文字は特殊変数 $X$Y の位置を再設定します。これは NULL 文字 (ASCII 0) のときでも True ですが、NULL 文字列 ("") では異なります。原則として、出力不可能な文字を書き込むときの $CHAR の使用は、慎重に行ってください。このような文字は、予想できないカーソルの動きと画面動作をすることがあります。

$CHAR と %List 構造

%List 構造 (%Library.ListOpens in a new tab) は、出力不能文字を使用してエンコードされた文字列であるため、$CHAR の特定の値は、単一の要素が含まれる %List 構造になります。%List 構造を返す $CHAR の組み合わせは以下のとおりです。

  • $CHAR(1) は、空のリスト $lb() を返します。

  • $CHAR(1,1) は、2 要素の空のリスト $lb(,) を返します。

  • $CHAR(2,1)$CHAR(2,2)、または $CHAR(2,12) は、空の文字列が含まれるリスト $lb("") を返します。

  • $CHAR(2,4) は、$lb(0) を返します。

  • $CHAR(2,5) は、$lb(-1) を返します。

  • $CHAR(2,8) または $CHAR(2,9) は、$lb($double(0)) を返します。

3 文字以上が含まれ、単一要素リストが生成される $CHAR の組み合わせは、以下のような構文になります。

$CHAR(count,flag,string)

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 は常にペアの文字を解析します。

関連項目

FeedbackOpens in a new tab