ランタイム環境が異なるとデータを解釈する方法にも差が生じるので、ある環境から別の環境に渡すデータは、プログラム上での変換が必要な場合があります。データ変換が実行されるタイミングは、COBOL の準備時と、COBOL や Java™ の実行時です。
ワークステーション・ベースのファイルをビルド・サーバーに 転送する場合、COBOL の準備プロセスにより、ファイル・コンテンツ、ファイル・パス情報、および環境変数値が変換されます。この場合のデータ変換テーブルを確立するために必要なステップについては、後述します。
この場合は、 呼び出し先プログラムを参照する callLink エレメントの変換テーブルを指定できます。または、(callLink エレメントの中で) システム変数 sysVar.callConversionTable が実行時に変換テーブルを識別するよう指示することもできます。
この場合も、 呼び出し先プログラムを参照する callLink エレメントの変換テーブルを指定できます。または、(callLink エレメントの中で) システム変数 sysVar.callConversionTable が実行時に変換テーブルを識別するよう指示することもできます。
この場合は、 制御の転送先のプログラムを参照する asynchLink エレメントの変換テーブルを指定できます。または、(asynchLink エレメントの中で) システム変数 sysVar.callConversionTable が実行時に変換テーブルを識別するよう指示することもできます。
この場合は、 該当のファイルまたはデータ・キューを参照する fileLink エレメントの変換テーブルを指定できます。または、(fileLink エレメントの中で) システム変数 sysVar.callConversionTable が実行時に変換テーブルを識別するよう指示することもできます。
この場合は、 システム変数 sysVar.formConversionTable で双方向変換テーブルを指定します。
例えば、コードが 2 つの再定義レコードのいずれかに値を割り当てるときに、 それぞれが、別のプログラムに渡されるレコードとして、同じメモリー領域を参照する場合に、 実行時変換を使用します。値を割り当てる再定義レコードに応じて、 渡すデータの特性が異なると想定します。この場合、データ変換の要件は、生成時には不明です。
COBOL プログラムをワークステーション上で生成し、z/OS またはiSeries™ ビルド・サーバー上で準備すると、 変換は、ビルド記述子オプションである clientCodeSet および serverCodeSet の指定に従ってビルド・サーバー上で処理されます。 ビルド記述子オプションでは、z/OS および iSeries 上の ICONV 変換サービスに対して定義されるコード・セットを指定する必要があり、指定しないと、デフォルトの設定が適用されます。
双方向言語テキストも参照してください。
EGL 生成の COBOL プログラムが、ASCII 文字集合をサポートするリモート CICS 領域上のプログラムまたはファイルにアクセスすると、変換テーブルに従って、呼び出し側で変換が実行されます。この場合の変換テーブルは、コード・ページ変換の情報が格納されているロード・モジュールです。
次の表には、EGL と一緒に収録されている変換テーブルを示します。この変換テーブルには、生成された COBOL プログラムが実行時にアクセスできます。これらの変換テーブルは、EBCDIC 形式と Windows® 2000/NT/XP ASCII コード・ページの間でデータを変換します。
言語 | テーブル名 |
---|---|
ブラジル・ポルトガル語 | ELACNPTB |
中国語 (簡体字) | ELACNCHS |
中国語 (繁体字) | ELACNCHT |
英語、大文字 | ELACNENP |
英語 (米国) | ELACNENU |
フランス語 | ELACNFRA |
ドイツ語 | ELACNDEU |
イタリア語 | ELACNITA |
日本語、カタカナ (1 バイト文字セット) | ELACNJPN |
韓国語 | ELACNKOR |
スペイン語 | ELACNESP |
スイス・ドイツ語 | ELACNDES |
この場合のテーブル名は、実行時に必要な種類の変換を表すシンボルになります。
言語 | 呼び出し先プログラムのプラットフォーム | |||
---|---|---|---|---|
UNIX® | Windows 2000/NT/XP | z/OS UNIX システム・サービスまたは iSeries Java | z/OSiSeries COBOL | |
アラビア語 | CSOJ1046 | CSOJ1256 | CSOJ420 | CSOE420 |
中国語 (簡体字) | CSOJ1381 | CSOJ1386 | CSOJ1388 | CSOE1388 |
中国語 (繁体字) | CSOJ950 | CSOJ950 | CSOJ1371 | CSOE1371 |
キリル文字言語 | CSOJ866 | CSOJ1251 | CSOJ1025 | CSOE1025 |
デンマーク語 | CSOJ850 | CSOJ850 | CSOJ277 | CSOE277 |
東ヨーロッパ言語 | CSOJ852 | CSOJ1250 | CSOJ870 | CSOE870 |
英語 (英国) | CSOJ850 | CSOJ1252 | CSOJ285 | CSOE285 |
英語 (米国) | CSOJ850 | CSOJ1252 | CSOJ037 | CSOE037 |
フランス語 | CSOJ850 | CSOJ1252 | CSOJ297 | CSOE297 |
ドイツ語 | CSOJ850 | CSOJ1252 | CSOJ273 | CSOE273 |
ギリシャ語 | CSOJ813 | CSOJ1253 | CSOJ875 | CSOE875 |
ヘブライ語 | CSOJ856 | CSOJ1255 | CSOJ424 | CSOE424 |
日本語 | CSOJ943 | CSOJ943 | CSOJ1390 (カタカナ SBCS)、CSOJ1399 (ラテン語 SBCS) | CSOE1390 (カタカナ SBCS)、CSOE1399 (ラテン語 SBCS) |
韓国語 | CSOJ1363 | CSOJ1363 | CSOJ1364 | CSOE1364 |
ポルトガル語 | CSOJ850 | CSOJ1252 | CSOJ037 | CSOE037 |
スペイン語 | CSOJ850 | CSOJ1252 | CSOJ284 | CSOE284 |
スウェーデン語 | CSOJ850 | CSOJ1252 | CSOJ278 | CSOE278 |
スイス・ドイツ語 | CSOJ850 | CSOJ1252 | CSOJ500 | CSOE500 |
トルコ語 | CSOJ920 | CSOJ1254 | CSOJ1026 | CSOE1026 |
言語 | 呼び出し先プログラムのプラットフォーム | ||
---|---|---|---|
UNIX | Windows 2000/NT/XP | z/OS UNIX システム・サービスまたは iSeries Java | |
アラビア語 | CSOJ1046 | CSOJ1256 | CSOJ420 |
中国語 (簡体字) | CSOJ1381 | CSOJ1386 | CSOJ1388 |
中国語 (繁体字) | CSOJ950 | CSOJ950 | CSOJ1371 |
キリル文字言語 | CSOJ866 | CSOJ1251 | CSOJ1025 |
デンマーク語 | CSOJ850 | CSOJ850 | CSOJ277 |
東ヨーロッパ言語 | CSOJ852 | CSOJ1250 | CSOJ870 |
英語 (英国) | CSOJ850 | CSOJ1252 | CSOJ285 |
英語 (米国) | CSOJ850 | CSOJ1252 | CSOJ037 |
フランス語 | CSOJ850 | CSOJ1252 | CSOJ297 |
ドイツ語 | CSOJ850 | CSOJ1252 | CSOJ273 |
ギリシャ語 | CSOJ813 | CSOJ1253 | CSOJ875 |
ヘブライ語 | CSOJ856 | CSOJ1255 | CSOJ424 |
日本語 | CSOJ943 | CSOJ943 | CSOJ1390 (カタカナ SBCS)、CSOJ1399 (ラテン語 SBCS) |
韓国語 | CSOJ949 | CSOJ949 | CSOJ1364 |
ポルトガル語 | CSOJ850 | CSOJ1252 | CSOJ037 |
スペイン語 | CSOJ850 | CSOJ1252 | CSOJ284 |
スウェーデン語 | CSOJ850 | CSOJ1252 | CSOJ278 |
スイス・ドイツ語 | CSOJ850 | CSOJ1252 | CSOJ500 |
トルコ語 | CSOJ920 | CSOJ1254 | CSOJ1026 |
プログラムを Java から呼び出す場合に、 リンケージ・オプション・パーツで変換テーブルの値を指定しない場合は、 デフォルトの変換テーブルは英語 (米国) 用の変換テーブルになります。
レコードと構造体のデータ変換は、副構造のない構造体項目の宣言が基本になります。
型が CHAR、DBCHAR、または MBCHAR のデータは、(z/OS での COBOL 準備時に変換される場合) ICONV コード・セットに従って変換されるか、(EGL 生成の起動側で変換される場合) COBOL または Java 変換テーブルに従って変換されます。
充てん文字データ項目 (名前のないデータ項目) の場合や、型が DECIMAL、PACF、HEX、または UNICODE のデータ項目の場合は、変換が実行されません。
MBCHAR データの EBCDIC から ASCII への変換では、変換ルーチンによってシフトイン・シフトアウト (SO/SI) 文字が削除され、この文字数と同じ数のブランクがデータ項目の末尾に追加されます。ASCII から EBCDIC への変換では、変換ルーチンによって 2 バイトのストリングの前後に SO/SI 文字が挿入され、フィールドに収容できる有効な最後の文字で値が切り捨てられます。 MBCHAR フィールドが可変長レコード内にあり、現行レコードの末尾が MBCHAR フィールド内にある場合、レコード長は SO/SI 文字の挿入または削除を反映するように調整されます。レコード長は、現行レコードの末尾がどこにあるかを示しています。
型が BIN のデータ項目では、呼び出し側または呼び出し先のプラットフォームで Intel™ の 2 進数形式が使用され、 もう一方のプラットフォームではその形式が使用されていない場合、バイト数を基準にしたデータ項目の順序が変換ルーチンによって逆になります。
型が NUM または NUMC のデータ項目では、変換ルーチンが CHAR アルゴリズムを使用して、最後のバイトを除くすべてのバイトを変換します。符号ハーフバイト (フィールドの最後のバイトのうちの最初の半バイト) は、次の表に示す 16 進値に従って変換されます。
NUM 型 の EBCDIC | NUMC 型 の EBCDIC | ASCII |
---|---|---|
F (正符号) | C | 3 |
D (負符号) | D | 7 |