2016-04-19 16 views
0

に行くが、私は、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 
+0

「THRU E-PROCEDURE1」を削除します。あなたが作成しようとしているプログラムの悪夢はわかりません。 'SECTION'と' THRU'が 'PERFORM'に与える影響を認識していないようです。このヒット・アンド・ミス・プログラミングは、PERFORMスパゲッティの大きな山を作り出しています。あなたが望むと思うように見えても、理解して維持するのは非常に難しいでしょう。再び、あなたの出発点に戻り、あなたが "変換"しようとしているいくつかの実際のコードを表示してください。 –

+0

あなたが私に尋ねたものを追加しました –

+0

実際のサンプルプログラムではありません。 'GOTO'は次の声明を目標にしています。 @BruceMartinが答えてくれたので、プログラムはGOTOなしで同じように動作します。他の場所にCOBOLに変換したいものがあればそれを表示するPL/Iコードがあります。 –

答えて

2

A法案は言った、使ってはいけない。また、プロシージャまたはセクションを使用します。 は両方ともです。 #

ON ENDFILE(FILE001) GOTO ENDD; 
Cのjava /に慣れて人々のために

  03        pic x value 'N'. 
       88 File001-EOF   value 'Y'. 
       88 File001-has-data value 'N'. 

     PERFORM PROCEDURE1 
     display "PERFORM  PROCEDURE2 THRU E--PROCEDURE2" 
     PERFORM PROCEDURE2 
     GOBACK. 

     PROCEDURE1 SECTION. 
      display "BEGIN============PROC PROCEDURE1" 
      display "I AM LABEL LECTURE" 
      Read File001 
      at end set File001-EOF    to true 
      end-read 
      if File001-has-data 
       compute CTR1 = CTR1 + 1; 
      end-if 

      DISPLAY "I AM LABEL ENDD" 
      display " ENDD============PROC PROCEDURE1" 

      EXIT. 
     E--PROCEDURE1. 
      EXIT. 


     PROCEDURE2 SECTION. 
      display "BEGIN============PROC PROCEDURE2" 
      DISPLAY "I AM LABEL PROCEDURE2" 
      display " ENDD============PROC PROCEDURE2" 
      CONTINUE. 
     E--PROCEDURE2. 
      EXIT. 

:ON ENDFILE(FILE001は)あなたのプログラムがあるべきおおよそ何終わりのファイル

これの例外ハンドラを設定します

は、ファイル終了条件の例外ハンドラまたはエラーハンドラをセットアップします。 javaの場合、次のようになります。

try { 
    .... 
} catch (endOfFile e) { 
    Goto ENDD; 
} 
+1

「GO TO」を最適化しました。助けてもらえません:-) –