に行くが、私は、COBOLで 例「に進んでください。」の影響を相殺させることができます方法はあります"PERFORM PROCEDURE2 THRU E - PROCEDURE2"、私が段落ENDDにGOしたときに、コントロールがその段落に無制限に転送され、私はproc1の最後までゴブに使うことができないと思いますか?私が間違っている ?GOBACKと段落
@Bill
は、これは私が翻訳しようとしているプログラムです。
GOTO5POW : PROC OPTIONS(MAIN);
DCL FILE001 FILE INPUT RECORD ENV(RECSIZE(15));
DCL CTR1 PIC'99' INIT('0');
DCL CARTE CHAR(15);
CALL PROCEDURE1;
PUT SKIP LIST("PERFORM PROCEDURE2 THRU E--PROCEDURE2");
CALL PROCEDURE2;
PROCEDURE1: PROC;
PUT SKIP LIST("BEGIN============PROC PROCEDURE1");
ON ENDFILE(FILE001) GOTO ENDD;
LECTURE:
PUT SKIP LIST("I AM LABEL LECTURE");
READ FILE(FILE001) INTO(CARTE);
CTR1 = CTR1 + 1;
PUT SKIP LIST("Record "||CTR1||"=/" || CARTE ||"/");
IF CARTE="AAAAAAAAAAAAAAA" THEN GOTO ENDD;
ENDD:
PUT SKIP LIST("I AM LABEL ENDD");
PUT SKIP LIST(" ENDD============PROC PROCEDURE1");
END PROCEDURE1;
PROCEDURE2 : PROC;
PUT SKIP LIST("BEGIN============PROC PROCEDURE2");
PUT SKIP LIST("I AM LABEL PROCEDURE2");
PUT SKIP LIST(" ENDD============PROC PROCEDURE2");
END PROCEDURE2;
END GOTO5POW ;
出力は次のとおりです。
BEGIN============PROC PROCEDURE1
I AM LABEL LECTURE
Record 01=/AAAAAAAAAAAAAAA/
I AM LABEL ENDD
ENDD============PROC PROCEDURE1
PERFORM PROCEDURE2 THRU E--PROCEDURE2
BEGIN============PROC PROCEDURE2
I AM LABEL PROCEDURE2
ENDD============PROC PROCEDURE2
しかし、COBOLで、この生成された出力:
BEGIN============PROC PROCEDURE1
I AM LABEL LECTURE
Record 01=/AAAAAAAAAAAAAAA/
I AM LABEL ENDD
BEGIN============PROC PROCEDURE2
I AM LABEL PROCEDURE2
ENDD============PROC PROCEDURE2
「THRU E-PROCEDURE1」を削除します。あなたが作成しようとしているプログラムの悪夢はわかりません。 'SECTION'と' THRU'が 'PERFORM'に与える影響を認識していないようです。このヒット・アンド・ミス・プログラミングは、PERFORMスパゲッティの大きな山を作り出しています。あなたが望むと思うように見えても、理解して維持するのは非常に難しいでしょう。再び、あなたの出発点に戻り、あなたが "変換"しようとしているいくつかの実際のコードを表示してください。 –
あなたが私に尋ねたものを追加しました –
実際のサンプルプログラムではありません。 'GOTO'は次の声明を目標にしています。 @BruceMartinが答えてくれたので、プログラムはGOTOなしで同じように動作します。他の場所にCOBOLに変換したいものがあればそれを表示するPL/Iコードがあります。 –