ランタイム環境が異なるとデータを解釈する方法にも差が生じるので、ある環境から別の環境に渡すデータは、プログラム上での変換が必要な場合があります。 Java™ 環境から COBOL 環境に移動したデータ、および COBOL から Java に移動したデータは、必ずデータ変換を行う必要があります。データ変換が実行されるタイミングは、COBOL の準備時と、COBOL や Java の実行時です。
アラビア語またはヘブライ語などの双方向言語をサポートするプログラムでは、BIDI 変換テーブルを使用して、コード・ページ変換と併せてテキスト・データの再配列を指定できます。BIDI 変換テーブルの作成については、トピック『双方向言語テキスト』を参照してください。
ワークステーション・ベースのファイルをビルド・サーバーに 転送する場合、COBOL の準備プロセスにより、ファイル・コンテンツ、ファイル・パス情報、および環境変数値が変換されます。この場合のデータ変換テーブルの設定に必要なステップについては、このトピックの中で後述します。
この場合は、 呼び出し先プログラムを参照する callLink 要素で変換テーブルを指定できます。または、(callLink 要素の中で) sysVar.callConversionTable システム変数が実行時に変換テーブルを指定するように指示することもできます。
この場合は、EGL デプロイメント記述子 (.egldd) ファイルの EGL バインディングで変換テーブルを指定できます。 変換テーブルを指定するには、ローカル以外のプロトコルの conversionTable プロパティーを設定します。
この場合は、 呼び出し先プログラムを参照する callLink 要素で変換テーブルを指定できます。または、(callLink 要素の中で) sysVar.callConversionTable システム変数が実行時に変換テーブルを指定するように指示することもできます。
この場合は、vgLib.startTransaction システム関数に使用されたレコードを参照する asynchLink 要素で変換テーブルを指定できます。 または、(asynchLink 要素の中で) sysVar.callConversionTable システム変数が実行時に変換テーブルを指定するように指示することもできます。
これは、Java プログラムでは不可能です。Java の vgLib.startTransaction 関数は、ローカル・システム上にあるプログラムしか開始できません。すべてのプログラムはローカルであるため、変換する必要はありません。
この場合は、 該当のファイルまたはデータ・キューを参照する fileLink 要素で変換テーブルを指定できます。または、(fileLink 要素の中で) sysVar.callConversionTable システム変数が実行時に変換テーブルを指定するように指示することもできます。
z/OS COBOL 環境での変換テーブルのカスタマイズについては、「IBM Rational® COBOL Runtime Guide for zSeries」を参照してください。
COBOL プログラムをワークステーション上で生成し、z/OS または iSeries® ビルド・サーバー上で準備すると、 変換は clientCodeSet および serverCodeSet ビルド記述子オプションの指定に従ってビルド・サーバー上で処理されます。 ビルド記述子オプションでは、z/OS および iSeries 上の ICONV 変換サービスに対して定義されるコード・セットを指定する必要があり、指定しないと、デフォルトの設定が適用されます。
アラビア語やヘブライ語などの双方向言語をサポートするプログラムでは、コード・ページ変換のほか、テキスト・リテラルの再配列も必要になる場合があります。 詳しくは、トピック『双方向言語テキスト』を参照してください。
生成した COBOL プログラムが、ASCII 文字セットをサポートするリモート CICS 領域上のプログラムまたはファイルにアクセスすると、変換テーブルに従って、呼び出し側で変換が実行されます。この場合の変換テーブルは、コード・ページ変換の情報が格納されているロード・モジュールです。
次の表には、EGL と一緒に収録されている変換テーブルを示します。この変換テーブルには、生成された COBOL プログラムが実行時にアクセスできます。これらの変換テーブルは、EBCDIC 形式と Windows 2000/NT/XP ASCII コード・ページの間でデータを変換します。
| 言語 | テーブル名 |
|---|---|
| ブラジル・ポルトガル語 | ELACNPTB |
| 中国語 (簡体字) | ELACNCHS |
| 中国語 (繁体字) | ELACNCHT |
| 英語、大文字 | ELACNENP |
| 英語 (米国) | ELACNENU |
| フランス語 | ELACNFRA |
| ドイツ語 | ELACNDEU |
| イタリア語 | ELACNITA |
| 日本語、カタカナ (1 バイト文字セット) | ELACNJPN |
| 韓国語 | ELACNKOR |
| スペイン語 | ELACNESP |
| スイス・ドイツ語 | ELACNDES |
この場合のテーブル名は、実行時に必要な種類の変換を表すシンボルになります。
| リモート・プラットフォーム | |||||
|---|---|---|---|---|---|
| 言語 | Linux | UNIX | Windows 2000/NT/XP | z/OS UNIX システム・サービスまたは iSeries Java | z/OS または iSeries COBOL |
| アラビア語 | CSOJ1046 | CSOJ1046 | CSOJ1256 | CSOJ420 | CSOE420 |
| 中国語 (簡体字) | CSOJ1381 | CSOJ1381 | CSOJ1386 | CSOJ1388 | CSOE1388 |
| 中国語 (繁体字) | CSOJ950 | CSOJ950 | CSOJ950 | CSOJ1371 | CSOE1371 |
| キリル文字言語 | CSOJ866 | CSOJ866 | CSOJ1251 | CSOJ1025 | CSOE1025 |
| デンマーク語 | CSOJ850 | CSOJ850 | CSOJ850 | CSOJ277 | CSOE277 |
| 東ヨーロッパ言語 | CSOJ852 | CSOJ852 | CSOJ1250 | CSOJ870 | CSOE870 |
| 英語 (英国) | CSOJ850 | CSOJ850 | CSOJ1252 | CSOJ285 | CSOE285 |
| 英語 (米国) | CSOJ850 | CSOJ850 | CSOJ1252 | CSOJ037 | CSOE037 |
| フランス語 | CSOJ850 | CSOJ850 | CSOJ1252 | CSOJ297 | CSOE297 |
| ドイツ語 | CSOJ850 | CSOJ850 | CSOJ1252 | CSOJ273 | CSOE273 |
| ヘブライ語 | CSOJ856 | CSOJ856 | CSOJ1255 | CSOJ424 | CSOE424 |
| 日本語 | CSOJ943 | CSOJ943 | CSOJ943 | CSOJ1390 (カタカナ SBCS)、CSOJ1399 (ラテン語 SBCS) | CSOE1390 (カタカナ SBCS)、CSOE1399 (ラテン語 SBCS) |
| 韓国語 | CSOJ1363 | CSOJ1363 | CSOJ1363 | CSOJ1364 | CSOE1364 |
| ポルトガル語 | CSOJ850 | CSOJ850 | CSOJ1252 | CSOJ037 | CSOE037 |
| スペイン語 | CSOJ850 | CSOJ850 | CSOJ1252 | CSOJ284 | CSOE284 |
| スウェーデン語 | CSOJ850 | CSOJ850 | CSOJ1252 | CSOJ278 | CSOE278 |
| スイス・ドイツ語 | CSOJ850 | CSOJ850 | CSOJ1252 | CSOJ500 | CSOE500 |
| トルコ語 | CSOJ920 | CSOJ920 | CSOJ1254 | CSOJ1026 | CSOE1026 |
Java からプログラムを呼び出す際、 リンケージ・オプション・パーツに変換テーブルの値が指定されていない場合のデフォルトの変換テーブルは、英語 (US) の変換テーブルになります。
レコードと構造体のデータ変換は、副構造のない構造体フィールドの宣言が基本になります。
名前のない (構造化レコード内でアスタリスクによって示される) 変数や、BIN、BIGINT、BOOLEAN、INT、SMALLINT、DECIMAL、MONEY、PACF、 HEX、STRING、または UNICODE 型の変数の変換は実行されません。 ただし、双方向変換テーブルを使用している場合は、UNICODE および STRING 変数が、表に定義されているとおり反転されます。 詳しくは、双方向データの処理を参照してください。
CHAR、DBCHAR、または MBCHAR 型のデータは、COBOL または Java の変換テーブルに従って変換されます。
FLOAT および SMALLFLOAT 型の変数の場合、変換ルーチンは、Java には IEEE 754 フォーマット、zSeries COBOL には IBM® 370 フォーマットを使用して、Java から zSeries COBOL への変換、およびその逆の変換を行います。 Java と iSeries COBOL 間の場合、FLOAT および SMALLFLOAT 変数の変換は必要ありません。
MBCHAR データの EBCDIC から ASCII への変換では、変換ルーチンによってシフトイン・シフトアウト (SO/SI) 文字が削除され、この文字数と同じ数のブランクが変数の末尾に追加されます。ASCII から EBCDIC への変換では、変換ルーチンによって 2 バイトのストリングの前後に SO/SI 文字が挿入され、フィールドに収容できる有効な最後の文字で値が切り捨てられます。 MBCHAR フィールドが可変長レコード内にあり、現行レコードの末尾が MBCHAR フィールド内にある場合、レコード長は SO/SI 文字の挿入または削除を反映するように調整されます。レコード長は、現行レコードの末尾がどこにあるかを示しています。
| NUM 型の EBCDIC | NUMC 型の EBCDIC | ASCII |
|---|---|---|
| F (正符号) | C | 3 |
| D (負符号) | D | 7 |
DATE、INTERVAL、TIME、または TIMESTAMP 型の変数の場合、EGL は、CHAR アルゴリズムおよびストリング形式のその変数を使用して値を変換します。
sysLib.convert() システム関数および sysVar.callConversionTable システム変数の詳細は、 「EGL 言語解説書」のトピック『convert()』および『callConversionTable』に記載されています。