このセクションは、主に、MIGR オプションによってフラグ設定されていない COBOL ステートメントから 構成されています。これらのステートメントは、OS/VS COBOL コンパイラーによって受け入れられましたが、Enterprise COBOL によって受け入れらないステートメントもあります。
A = B AND ( < C OR D)
(A = 0 AND B) = 0
Enterprise COBOL はそのような ACCEPT ステートメントを受け入れません。
Enterprise COBOL は、これら 2 つの言語エレメントが同じデータ記述記入項目に ついて指定された場合、これらを受け入れません。したがって、Enterprise COBOL では、1 つのデータ記述記入項目の中にこの文節と 記号の両方が含まれていてはなりません。
OS/VS COBOL プログラムの中で BLANK WHEN ZERO 文節と、ゼロ抑制記号としてのアスタリス クの両方を指定している場合に、Enterprise COBOL で同じ動作を得るため には、BLANK WHEN ZERO 文節を除去してください。
"1 IS NOT > 0"というメッセージが出され、数値的に正しくありません。
"1 > 0"
05 COMP-TABLE.
10 COMP-PAY PIC 9(4).
10 COMP-HRS PIC 9(3).
05 COMP-ITEM PIC S9(7) COMP-3.
PROCEDURE DIVISION.
MOVE 0 TO COMP-PAY COMP-HRS.
MOVE 1 TO COMP-ITEM.
IF COMP-ITEM > COMP-TABLE
DISPLAY '1 > 0'
ELSE
DISPLAY '1 IS NOT > 0'.
Enterprise COBOL ではこのような比較を許可しません。
言語環境プログラムのもとで CICS での実行時に OS/VS COBOL プログラムが動的 CALL ステートメントを発行すると、プ ログラムは異常終了コード U3504 で異常終了します。
Enterprise COBOL プログラムは動的 CALL ステートメントを使用して、CICS のもとで、他の Enterprise COBOL プログラムや、PL/I および C/C++ プログラムを呼び出すことができます。
Enterprise COBOL では、プログラムの終わりに終了ステートメント (STOP RUN または GOBACK) をコーディ ングしていない場合、プログラムは暗黙の GOBACK によって終了します。制御のフローは COBOL プログラムの終わりを越えて進むことはできません。
「終わりを越えて」別のプログラムに進むプログラムがある場合は、コードを、別のプログラムへの CALL インターフェースに変更してください。
Enterprise COBOL では、修飾された索引名を使用できません。索引名は参照される場合、固有でな ければなりません。
Enterprise COBOL はそのような LABEL RECORD 文節を受け入れません。
WORKING-STORAGE SECTION. 01 WK1 USAGE COMP-4 PIC S9(9). PROCEDURE DIVISION. MOVE 1234567890 to WK1 DISPLAY WK1. GOBACK.
この例では、10 桁の値が 9 桁の項目に移動されているので無効な COBOL コーディングです。
たとえば、以下のコンパイラー・オプションを指定してコンパイルされた場合、結果は以 下のようになります。
| OS/VS COBOL の NOTRUNC | Enterprise COBOL の TRUNC(OPT) | |
|---|---|---|
| バイナリー値 | x'499602D2' | x'0DFB38D2' |
| DISPLAY 値 | 234567890 | 234567890 |
OS/VS COBOL の場合、バイナリー・データ項目に含まれているバイナリー値は DISPLAY 値と同じ ではありません。DISPLAY 値は PICTURE 文節内の桁の数に基づいており、バイナリー値はバイナリー・データ項目 のサイズ (このケースでは 4 バイト) に基づいています。バイナリー・データ項目の 10 進数での実際の値は 1234567890 です。
Enterprise COBOL の場合、バイナリー値と DISPLAY 値は同じです。これは、発生した切り捨て が PICTURE 文節内の桁の数に基づいていたためです。
この状態は、OS/VS COBOL では MIGR によって、Enterprise COBOL で は TRUNC(OPT) を用いてのコンパイル時に、フラグが設定されます。
MOVE CORRESPONDING GROUP-ITEM-A TO GROUP-ITEM-B GROUP-ITEM-Cは、以下の 2 つの Enterprise COBOL MOVE CORRESPONDING ステートメントに変更する必要があります。
MOVE CORRESPONDING GROUP-ITEM-A TO GROUP-ITEM-B MOVE CORRESPONDING GROUP-ITEM-A TO GROUP-ITEM-C
01 KANCFUNC.
03 CL PIC XX.
03 KX9 PIC XX.
03 CC PIC XX.
01 HEAD1-AREA.
03 CL PIC XX.
03 KX9 PIC XX.
03 CC PIC XX.
03 KX9 PIC XX.
.
.
.
MOVE CORR KANCFUNC to HEAD1-AREA.
Enterprise COBOL の場合、受信側内のデータ項目が固有の名前を持つように変更してください。
MOVE aa TO bb TO cc
MOVE aa TO bb cc
MOVE ALL ' ' TO num1ここで、num1 は PIC 99 です。
Enterprise COBOL では上記のケースを許可しません。
77 A PIC 999.
77 B PIC 99.
.
.
.
MOVE A TO B.
VS COBOL II、COBOL (MVS および VM 版)、および COBOL (OS/390 および VM 版) バ ージョン 2 リリース 1 は、このケースで警告メッセージを出しません。
COBOL (OS/390 および VM 版) バージョン 2 リリース 2 および Enterprise COBOL は、新しいコンパイラー・オプ ション DIAGTRUNC が有効であれば、警告メッセージを出します。
01 D PIC 999.
01 A.
02 B OCCURS 1 TO 200 TIMES
ASCENDING KEY C
DEPENDING ON D
INDEXED BY H.
02 C PIC 99.
01 D PIC 999.
01 A.
02 B OCCURS 1 TO 200 TIMES
DEPENDING ON D
ASCENDING KEY C
INDEXED BY H.
02 C PIC 99.
PERFORM CHECK-FOR-MATCH THRU CHECK-FOR-MATCH-EXIT
UNTIL PARM-COUNT = 7
OR UNTIL SSREJADV-EOF.
Enterprise COBOL では、2 番目の UNTIL ステートメントを許可しません。以下の例に示すように、除去する必要があります。
PERFORM CHECK-FOR-MATCH THRU CHECK-FOR-MATCH-EXIT
UNTIL PARM-COUNT = 7
OR SSREJADV-EOF.
Enterprise COBOL では、1 つの行で 2 つのピリオドが検出されると、警告メッセージ (RC = 4) が 出される (PROCEDURE DIVISION の場合) か、または重大メッセージ (RC = 12) が出され ます (ENVIRONMENT DIVISION または DATA DIVISION の場合)。
WORKING-STORAGE SECTION.
01 A PIC 9.
.
.
.
MOVE 1 TO A.
.
.
GOBACK.
OS/VS COBOL は、欠落しているピリオドを診断し、警告メッセージ (RC = 4) を出しました。
Enterprise COBOL は、エラー・メッセージ (RC = 8) を出します。
05 WEIRD-NUMERIC-EDITED PIC Z(11)VZ9.
Enterprise COBOL は上記の例のようなステートメントを受け入れません。Z9 を ZZ または 99 に変更しなければなりません。
A of B of B
OS/VS COBOL では句の繰り返しを許可していましたが、Enterprise COBOL では許可していません。
Enterprise COBOL は、読み取られるファイル用の SELECT 文節でレコード・キーとして 指定されたデータ項目の名前だけを受け入れます。
Enterprise COBOL では、RECORD CONTAINS n CHARACTERS 文節は固定長レコードを含むファイルを生成します。
Enterprise COBOL では、これは許可されません。
SD ...
01 SORT-REC-HEADER.
05 SORT-KEY PIC X(20).
05 SORT-HEADER-INFO PIC X(40).
05 FILLER PIC X(20).
01 SORT-REC-DETAIL REDEFINES SORT-REC-HEADER.
05 FILLER PIC X(20).
05 SORT-DETAIL-INFO PIC X(60).
Enterprise COBOL で類似した機能を得るためには、REDEFINES 文節を削除してください。
01 E.
03 F OCCURS 10.
05 G PIC X.
03 I REDEFINES F PIC X.
Enterprise COBOL は、テーブルの再定義を許可しないため、上記の例の場合は 重大 (RC = 12) メッセージを出します。
| OS/VS COBOL R2.3 | Enterprise COBOL |
|---|---|
| = TO | = または EQUAL TO |
| > THAN | > または GREATER THAN |
| < THAN | < または LESS THAN |
SORT FILE-1
ON ASCENDING KEY AKEY-1
INPUT PROCEDURE IPROC-1
OUTPUT PROCEDURE OPROC-1
UNTIL AKEY-1 = 99.
SORT FILE-2
ON ASCENDING KEY AKEY-2
INPUT PROCEDURE IPROC-2
OUTPUT PROCEDURE OPROC-2
10 TIMES.
Enterprise COBOL は上記の例のようなステートメントを受け入れません。
SORT ステートメントの正しい構文では、ASCENDING KEY または DESCENDING KEY の後で、ソート・キーであるデータ名を使用することができます。ワード KEY はオプショナルです。
OS/VS COBOL は、ASCENDING KEY の後で使用された場合の IS を受け入れました。Enterprise COBOL はこのコンテキストでの IS を受け入れません。以下に例を示します。
SORT SORT-FILE
ASCENDING KEY IS SD-NAME-FIELD
USING INPUT-FILE
GIVING SORTED-FILE.
Enterprise COBOL では、同様の MOVE が最初のレコードのデータをオーバーレイします。SORT または MERGE 操作時に、SD データ項目が使用されます。OUTPUT PROCEDURE 内で、最初の RETURN ステートメントの実行前に、その SD データ項目を 使用してはなりません。最初の RETURN ステートメントの実行前にデータがこのレコード域に移動されると、最初に戻されるレコードが上書きされます。
UNSTRING A-FIELD DELIMITED BY '-' ','
INTO RECV-FIELD-1
POINTER PTR-FIELD.
UNSTRING A-FIELD DELIMITED BY '-' OR ','
INTO RECV-FIELD-2
POINTER IS PTR-FIELD.
01 NUM-ED-ITEM PIC $$9.99+
.
.
.
UNSTRING NUM-ED-ITEM DELIMITED BY '$'
INTO RECV-FIELD-1
POINTER PTR-FIELD
Enterprise COBOL では、UNSTRING ステートメント内の送信側として非数値データ項目のみが許可されます。
Enterprise COBOL は、これらのエラーのいずれかを含んでいる UNSTRING ステートメントが検出されると、メッセージを出します。
UNSTRING ID-SEND DELIMITED BY ALL "*" INTO ID-R1 DELIMITER IN ID-D1 COUNT IN ID-C1 INTO ID-R2 DELIMITER IN ID-D2 COUNT IN ID-C2 INTO ID-R2 DELIMITER IN ID-D3 COUNT IN ID-C3
Enterprise COBOL では、UNSTRING ステートメントで複数の INTO 句を使用することはできません。
Enterprise COBOL では、VALUE 文節のリテラルは PICTURE 文節と一致しな ければならず、符号を除去しなければなりません。