MFS 変換の問題

MFS に関して生じる可能性があるいくつかの問題を次に示します (ただし、次に限定されません)。

MFS null 文字

問題

メインフレームでは、フィールドの切り捨てに使用される MFS の null 文字は x'3F' と定義されます。IMS 対応エンタープライズ サーバーでは、MFS null 文字はデフォルトで x'1A' と定義されます。これは ASCII の x'3F' に該当します。

解決方法

MFS null 文字を別の文字または 16 進値に変換できます。これを行うには、Enterprise Server Administration でエンタープライズ サーバー インスタンスを編集し、[Server]、[Properties]、[MSS]、[IMS]、[TM] タブの [MFS null character] フィールドに値を指定します。

重要: null 文字を変換し、メインフレームからダウンロードしたプログラムで x'3F' をチェックする場合は、代わりに新しい null 値をチェックするようにプログラム コードを更新します。
MFS 属性

問題

文字リテラルを使用して MFS 属性の値を指定した場合、ASCII でコンパイルした際の結果の値は、EBCDIC でコンパイルした際に取得する値とは異なります。たとえば、次の 2 つのコード フラグメントは、EBCDIC 文字セットでコンパイルした場合は同じ結果になります。ただし、ASCII を使用すると、最初の例の動作が異なり、'{A' は C0C1 ではなく 16 進数 7B41 に変換されます。

文字リテラルを使用して指定した属性:

05 ATTRIBUTE-VARIABLES.
   10 CURSOR-ATTR          PIC X(2) VALUE '{A'. 
   10 ERROR-ATTR           PIC X(2) VALUE '{I'.
   10 OK-ATTR              PIC X(2) VALUE ' A'.
   10 PROT-ATTR            PIC X(2) VALUE ' 1'.

16 進数/2 進法を使用して指定した属性:

05 ATTRIBUTE-VARIABLES.
   10 CURSOR-ATTR          PIC X(2) VALUE X'C0C1'.
   10 ERROR-ATTR           PIC X(2) VALUE X'C0C9'.
   10 OK-ATTR              PIC X(2) VALUE X'00C1'.
   10 PROT-ATTR            PIC X(2) VALUE X'00F1'.

解決方法

プログラムの移行を容易にするために、MFS 属性の値が文字と 2 進法のどちらを使用してコード化されるかを、トランザクションまたはシステム レベルで指定できます(トランザクション定義に指定した値によって、システムの値がオーバーライドされます)。

属性値が文字リテラルとしてコード化されるように指定した場合、Enterprise Server は MFS 属性の値を、プログラムが EBCDIC としてコンパイルされた際に使用される値に自動で変換します。たとえば、'{A' を属性に割り当て、ASCII でコンパイルすることにより、生成された 16 進数の値 7B41 は、正しい値 C0C1 に変換されます。属性値をバイナリ データとして指定する場合、Enterprise Server は処理を行いません。

別の解決策として、文字ではなく x'nn' 表記法 (上記の 2 番目の例で使用) を使用するようにプログラムを編集します。

MFS 充填文字

問題

MFS ソースで、入力充填文字は 16 進表記法で指定されます。次に例を示します。
MFLD  HEX102,LTH=030,FILL=X'DF'
Enterprise Server は、実行時にこれらの値を EBCDIC に自動的に変換しますが、COBOL プログラムは X'DF' のフィールドを調べます。

解決方法

充填文字の 16 進値を変換せずに維持するには、HEXFILL 指令を使用して MFS を生成する必要があります。詳細については、「HEXFILL」を参照してください。