HEXBYT - 10 進数を文字に変換
HEXBYT 関数は、10 進数の整数に対応する ASCII または Unicode のいずれかの文字を取得します。取得される文字は、構成およびオペレーティングシステムにより異なります。指定する 10 進数は、構成されたコードページの文字に関連する値にする必要があります。HEXBYT 関数は、ASCII、Unicode 文字セットのいずれかで、単一文字を返します。この関数を使用することにより、CTRAN 関数と同様、使用するキーボードにはない文字を生成することができます。
Unicode 構成の場合、この関数は次の範囲の値を使用します。
- 1 バイト文字 - 0 (ゼロ) から 255
- 2 バイト文字 - 256 から 65535
- 3 バイト文字 - 65536 から 16777215
- 4 バイト文字 - 16777216 から 4294967295
特殊文字の表示は、ソフトウェアとハードウェアにより異なります。特殊文字には表示されないものがあります。出力可能な ASCII および EBCDIC 文字とそれぞれの整数値についての詳細は、ASCII 文字コード表を参照してください。
10 進数を文字に変換
HEXBYT(decimal_value, output)
整数
文字に変換される 10 進数です。Unicode 以外の環境では、255 より大きい値は、decimal_value の値を 256 で除算した剰余として扱われます。指定する 10 進数は、構成されたコードページの文字に関連する値にする必要があります。
文字
結果を格納するフィールド名、または出力フォーマットです。フォーマットは一重引用符 (') で囲みます。
10 進数を ASCII および Unicode の文字に変換
次のリクエストは、HEXBYT 関数を使用し、10進数の整数値「130」を ASCII コードページ 1252 のカンマ (,) に変換します。次にカンマ (,) は、LAST_NAME と FIRST_NAME の連結に使用され、NAME フィールドが生成されます。
TABLE FILE EMPLOYEE PRINT LAST_NAME AND COMPUTE COMMA1/A1 = HEXBYT(130, COMMA1); NOPRINT COMPUTE NAME/A40 = LAST_NAME || COMMA1| ' '| FIRST_NAME; BY LAST_NAME NOPRINT BY FIRST_NAME WHERE DEPARTMENT EQ 'MIS'; ON TABLE SET PAGE NOLEAD ON TABLE SET STYLE * GRID=OFF,$ ENDSTYLE END
下図は、出力結果を示しています。
コードページ 65001 を使用するよう構成された Unicode 環境でこれと同じ出力結果を生成するには、COMMA1 フィールドの COMPUTE コマンドを次の構文で置換します。この場合、HEXBYT 関数の呼び出しによって、整数値「14844058」がカンマ (,) に変換されます。
COMPUTE COMMA1/A1 = HEXBYT(14844058, COMMA1); NOPRINT
10 進数を文字に変換
HEXBYT 関数は、LAST_INIT_CODE を対応する文字に変換し、結果を LAST_INIT に格納します。
TABLE FILE EMPLOYEE PRINT LAST_NAME AND COMPUTE LAST_INIT_CODE/I3 = BYTVAL(LAST_NAME, 'I3'); COMPUTE LAST_INIT/A1 = HEXBYT(LAST_INIT_CODE, LAST_INIT); WHERE DEPARTMENT EQ 'MIS'; END
ASCII プラットフォームの出力結果は次のとおりです。
LAST_NAME LAST_INIT_CODE LAST_INIT --------- -------------- --------- SMITH 83 S JONES 74 J MCCOY 77 M BLACKWOOD 66 B GREENSPAN 71 G CROSS 67 C
メインフレーム環境での中括弧の挿入
HEXBYT は、10 進数の整数 192 を対応する EBCDIC 文字の左中括弧 ({) に、208 を対応する右中括弧 (}) にそれぞれ変換します。CURR_SAL の値が 12000 より小さい場合、LAST_NAME は中括弧 ({}) で囲まれます。
DEFINE FILE EMPLOYEE BRACE/A17 = HEXBYT(192, 'A1') | LAST_NAME | HEXBYT(208, 'A1'); BNAME/A17 = IF CURR_SAL LT 12000 THEN BRACE ELSE LAST_NAME; END TABLE FILE EMPLOYEE PRINT BNAME CURR_SAL BY EMP_ID END
出力結果は次のとおりです。
EMP_ID BNAME CURR_SAL
------ ----- --------
071382660 {STEVENS } $11,000.00
112847612 SMITH $13,200.00
117593129 JONES $18,480.00
119265415 {SMITH } $9,500.00
119329144 BANNING $29,700.00
123764317 IRVING $26,862.00
126724188 ROMANS $21,120.00
219984371 MCCOY $18,480.00
326179357 BLACKWOOD $21,780.00
451123478 MCKNIGHT $16,100.00
543729165 {GREENSPAN } $9,000.00
818692173 CROSS $27,062.00