実行時 CCSID に関する考慮事項

ここでは、次のものについての実行時 CCSID に関する考慮事項について説明します。

ロケールとファイルの場合

iSeries システム・オブジェクト (たとえば、ファイルまたはロケール) に CCSID を割り当てると、ILE COBOL は、 実行時に使用された CRTCBLMOD (ILE COBOL モジュールの作成) コマンドの指定された CCSID パラメーターを調べて、変換が必要かどうかを決めます。 CCSID パラメーターに指定できる値は、次のものです。

*JOBRUN
実行時ジョブの CCSID が使用されます。
*JOB
コンパイル・ジョブの CCSID が使用されます。
*HEX
CCSID 65535 が使用されます。
コード化文字セット ID
指定した CCSID が使用されます。

上記の CCSID のどれでも 65535 に等しい場合には、変換は行われません。

ロケール・オブジェクトを作成するときに、それに CCSID を割り当てることができます。 たとえば、前述のCCSID をロケールに割り当てるで作成されるロケール・オブジェクトは 273 という CCSID で作成されます。 プログラムをコンパイルするときに、CCSID を割り当てることもできます。 コンパイル時に指定した CCSID がそのロケール・オブジェクトの作成時に指定された CCSID と異なる場合には、 実行時に、コンパイル時に指定された CCSID に変換されます。

日時データ項目と数字編集項目の場合

ロケール・オブジェクトの場合、ILE COBOL のロケールは、数字編集項目および 日付と時刻のカテゴリーの日時項目に関連付けられます。 以下に、ロケールと日時項目および数字編集項目をどのように関連付けるかについての例を示します。

SPECIAL-NAMES.
    LOCALE "EN_US" IN LIBRARY "QSYSLOCALE" IS usa.  1 

·
·
·
DATA DIVISION. WORKING-STORAGE SECTION. 01 DATE-WITH-LOCALE FORMAT DATE SIZE 10 LOCALE USA.  2  01 DATE-NO-LOCALE FORMAT DATE "@Y-%m-%d" VALUE "1997-08-09".  3  01 NUMERIC-EDITED-WITH-LOCALE PIC +$9(6).99 SIZE 15 LOCALE USA.  4  01 NUMERIC-EDITED-NO-LOCALE PIC +9(6).99 VALUE "+123456.78".
·
·
·
PROCEDURE DIVISION. MOVE DATE-NO-LOCALE TO DATE-WITH-LOCALE. MOVE NUMERIC-EDITED-NO-LOCALE TO NUMERIC-EDITED-WITH-LOCALE. DISPLAY "date-with-locale = " date-with-locale. DISPLAY "numeric-edited-with-locale = " numeric-edited-with-locale. STOP RUN.

プログラムの出力は、次のようになります。

date-with-locale = 08/09/97
numeric-edited-with-locale =    $123,456.78 

上記の例で、行  1  は、ロケール簡略名 usa を定義し、 そのロケール簡略名 usa をライブラリー QSYSLOCALEEN_US と関連付けます。 この行はロケール・オブジェクトを定義しますが、コンパイル時に存在する必要はありません。 ただし、ロケール・オブジェクトは実行時に存在する必要があります。 ロケール・オブジェクトの作成の詳細については iSeries でのロケールの作成または CCSID をロケールに割り当てるを参照してください。

 2  は、行  1  に定義されたロケール簡略名を日付データ項目 DATE-WITH-LOCALE と関連付けます。 行  4  は、 行  1  に定義されたロケール簡略名を数字編集データ項目 NUMERIC-EDITED-WITH-LOCALE と関連付けます。

実行時に、DATE-NO-LOCALE 内のデータが DATE-WITH-LOCALE に移動されると、 行  1  (EN_US) に定義されたロケール・オブジェクトの CCSID はコンパイル時に指定された CCSID と比較されます。 2 つの CCSID が異なるものであると、DATE-NO-LOCALE (行  3 ) に定義されたデータは、 コンパイル時 CCSID に変換され、MOVE ステートメントの結果として生じる定様式データは新しい CCSID に基づくものになります。

ILE COBOL のステートメントのほとんどは、データが CCSID 37 (すなわち、1 バイト文字 EBCDIC) になっているものとします。 しかし、ステートメントのなかには、1 つまたは複数の CCSID をサポートするものもあります。