$ASCII (ObjectScript)
構文
$ASCII(expression,position)
$A(expression,position)
引数
引数 | 説明 |
---|---|
expression | 変換する文字 |
position | オプション — 文字列内での文字の位置。1 から数えます。既定値は 1 です。 |
概要
$ASCII は expression で指定された単一の文字に対し文字コード値を返します。この文字は 8 ビット (拡張 ASCII) 文字あるいは 16 ビット (Unicode) 文字です。返り値は正の整数です。
expression 引数は、単一文字あるいは文字列に評価されます。expression が文字列に評価される場合、オプションの position 引数で、変換したい文字の位置を示す必要があります。
引数
expression
1 つ以上の文字を含む引用符付きの文字列として評価される式。この式には、変数名や数値、文字列リテラル、その他の有効な ObjectScript 式を指定できます。expression が複数の文字を含む文字列であるとき、position を使用して希望の文字を選択します。文字列に position が省略されると、$ASCII は先頭の文字の数値コードを返します。
expression が NULL 文字列に評価される場合、$ASCII は -1 を返します。例 : $ASCII("")。
二重引用符文字 (") の文字コード (34) を返すには、その文字を重複して使用し、引用符付きの文字列で囲んで指定します : $ASCII("""")。
position
0 以外の正の整数を指定します。符号付き、もしくは符号なしでもかまいません。position では整数以外の数値を使用することも可能ですが、InterSystems IRIS は数値の小数部分は無視し、整数部分しか考慮しません。position がない場合、$ASCII は expression の最初の文字の数値を返します。position の整数値が expression の文字数よりも多いか、または 1 より少ない場合、$ASCII は -1 を返します。
例
以下の例は、文字 W の ASCII 数値 87 を返します。
WRITE $ASCII("W")
以下の例は、Unicode 文字 "pi" と同等の数値 960 を返します。
WRITE $ASCII($CHAR(959+1))
以下の例は、変数 Z の先頭にある文字の ASCII の数値と同等の 84 を返します。
SET Z="TEST"
WRITE $ASCII(Z)
以下の例は、変数 Z の 3 番目にある文字の ASCII の数値と同等の 83 を返します。
SET Z="TEST"
WRITE $ASCII(Z,3)
以下の例は、2 番目の引数が文字列にある文字数よりも大きい位置を指定したので、-1 を返します。
SET Z="TEST"
WRITE $ASCII(Z,5)
以下の例では、FOR ループ内で $ASCII を使用して、変数 x にあるすべての文字を ASCII の 数値の同等値に変換します。$ASCII リファレンスには、ループが実行されるたびに更新される position 引数が含まれます。position が x にある文字数よりも大きい数に達したとき、$ASCII はループを終了する値 -1 を返します。
SET x="abcdefghijklmnopqrstuvwxyz"
FOR i=1:1 {
QUIT:$ASCII(x,i)=-1
WRITE !,$ASCII(x,i)
}
QUIT
以下の例は、文字列 X の簡単なチェックサムを生成します。$CHAR(CS) をこの文字列に連結すると、新しい文字列のチェックサムは常に 0 です。これにより、妥当性検証が簡単になります。
CXSUM
SET x="Now is the time for all good men to come to the aid of their party"
SET CS=0
FOR i=1:1:$LENGTH(x) {
SET CS=CS+$ASCII(x,i)
WRITE !,"Checksum is:",CS
}
SET CS=128-CS#128
WRITE !,"Final checksum is:",CS
以下の例は、小文字、または大文字と小文字を組み合わせたものをすべて大文字に変換します。
ST
SET String="ThIs Is a MiXeDCAse stRiNg"
WRITE !,"Input: ",String
SET Len=$LENGTH(String),Nstring=" "
FOR i=1:1:Len { DO CNVT }
QUIT
CNVT
SET Char=$EXTRACT(String,i),Asc=$ASCII(Char)
IF Asc>96,Asc<123 {
SET Char=$CHAR(Asc-32)
SET Nstring=Nstring_Char
}
ELSE {
SET Nstring=Nstring_Char
}
WRITE !,"Output: ",Nstring
QUIT
Unicode サポート
$ASCII 関数は、8 ビット文字と 16 ビット文字の両方をサポートします。8 ビット文字は 0 から 255 の数値を返します。16 ビット (Unicode) 文字は 65535 までの数値コードを返します。
文字の Unicode 値は通常、0 ~ 9 と A ~ F (それぞれ 10 ~ 15) の 16 進数の 4 桁の数字で表されます。しかし、ObjectScript 言語の基本関数は、通常 16 進数ではなく、10 進法の 10 進数値の ASCII 数値による文字を識別します。
したがって、Unicode 標準が推奨する 16 進数値の代わりに、$ASCII 関数は入力文字の 10 進数の Unicode 値を返すことによって、Unicode コード化をサポートします。この方法で、関数は Unicode をサポートしている間でも、後方互換性のままになります。10 進数から 16 進数への変換には、$ZHEX 関数を使用します。
InterSystems IRIS Unicode サポートの詳細は、"Unicode" を参照してください。
サロゲート・ペア
$ASCII は、サロゲート・ペアを認識しません。サロゲート・ペアは、一部の中国語の文字を表示したり、日本語の JIS2004 標準をサポートするために使用されます。$WISWIDE 関数を使用して、文字列にサロゲート・ペアが含まれているかどうかを判断することができます。$WASCII 関数は、サロゲート・ペアを認識して、正しく解析します。$ASCII と $WASCII は、それ以外は同一です。 ただし、$ASCII は通常 $WASCII より高速なため、サロゲート・ペアが出現しない場合は常に $ASCII が推奨されます。
$WASCII を $ZWASCII と混同しないでください。$ZWASCII は常にペアの文字を解析します。