データ変換

ランタイム環境が異なるとデータを解釈する方法にも差が生じるので、ある環境から別の環境に渡すデータは、プログラム上での変換が必要な場合があります。データ変換が実行されるタイミングは、COBOL の準備時と、COBOL や Java™ の実行時です。

ワークステーション・ベースのファイルをビルド・サーバーに 転送する場合、COBOL の準備プロセスにより、ファイル・コンテンツ、ファイル・パス情報、および環境変数値が変換されます。この場合のデータ変換テーブルを確立するために必要なステップについては、後述します。

実行時の状態が次のような場合にも、コード上で変換テーブルが使用されます。

例えば、コードが 2 つの再定義レコードのいずれかに値を割り当てるときに、 それぞれが、別のプログラムに渡されるレコードとして、同じメモリー領域を参照する場合に、 実行時変換を使用します。値を割り当てる再定義レコードに応じて、 渡すデータの特性が異なると想定します。この場合、データ変換の要件は、生成時には不明です。

これ以降は、次に示す項目の詳細を説明します。

COBOL プログラムの生成時のデータ変換

COBOL プログラムをワークステーション上で生成し、z/OS またはiSeries™ ビルド・サーバー上で準備すると、 変換は、ビルド記述子オプションである clientCodeSet および serverCodeSet の指定に従ってビルド・サーバー上で処理されます。 ビルド記述子オプションでは、z/OS および iSeries 上の ICONV 変換サービスに対して定義されるコード・セットを指定する必要があり、指定しないと、デフォルトの設定が適用されます。

双方向言語テキストも参照してください。

呼び出し側が COBOL プログラムの場合の実行時のデータ変換

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

起動側が Java コードの場合のデータ変換

以下の規則は Java コードに適用されます。
  • 生成された コードに適用されます。Java プログラムまたはラッパーが、生成された Java プログラムを呼び出すと、 実行時に呼び出される 1 組の EGL クラスに従って、呼び出し側で変換が実行されます。起動側が使用しているのとは異なるコード・ページを使用するリモート・プラットフォームに呼び出し側がアクセスする場合でも、 ほとんどの場合は、変換を要求する必要がまったくありません。ただし、次のような場合は、変換テーブルを指定する必要があります。
    • 呼び出し側が Java コードであり、1 つのコード・ページをサポートするマシン上で稼働している。
    • 呼び出し先プログラムが非 Java であり、別のコード・ページをサポートするマシン上で稼働している。

    この場合のテーブル名は、実行時に必要な種類の変換を表すシンボルになります。

  • 生成された Java プログラムがリモートの MQSeries® メッセージ・キューにアクセスすると、 実行時に呼び出される一連の EGL クラスに従って、起動側で変換が実行されます。起動側が使用しているのとは異なるコード・ページを使用するリモート・プラットフォームに呼び出し側がアクセスする場合は、 『関連要素』に示す、MQSeries メッセージ・キューを参照する変換テーブルを指定します。
次の表は、生成された Java コードが実行時にアクセスできる変換テーブルをまとめたものです。各変換テーブル名のフォーマットは、CSOcx で、c および x の意味は、次のとおりです。
c
呼び出し先のプラットフォームでサポートされている文字セットを表します。次のいずれかを選択します。
  • Java の場合は J (呼び出し先プログラムが EGL 生成の Java プログラムの場合)
  • EBCDIC の場合は E (呼び出し先プラットフォームが EGL 生成の COBOL プログラムの場合)
x
呼び出し先のプラットフォームでサポートされているコード・ページ番号を表します。各番号は、「Character Data Representation Architecture Reference and Registry、SC09-2190」に指定されています。各変換テーブルによってサポートされているコード化文字セットは、レジストリーによって識別できます。
次の表は、生成された Java コードが実行時にアクセスできる変換テーブルをまとめたものです。各変換テーブル名のフォーマットは、CSOJx で、c および x の意味は、次のとおりです。
x
呼び出し先のプラットフォームでサポートされているコード・ページ番号を表します。各番号は、「Character Data Representation Architecture Reference and Registry、SC09-2190」に指定されています。各変換テーブルによってサポートされているコード化文字セットは、レジストリーによって識別できます。
言語 呼び出し先プログラムのプラットフォーム
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
ご利用条件 | フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.(C) Copyright IBM Japan 2005.