2016-04-12 20 views
2

を実行するには、IS-それが実行ダブルを終了することができ:出口ダブル

   PERFORM VARYING J FROM 1 BY 1 UNTIL J>10 
        PERFORM VARYING K FROM 1 BY 1 UNTIL K>3 
         IF J=2 and K=2 
         EXIT PERFORM 
         ELSE 
         display "LABEL A ===> PROCEDURE NOM_PROC2 " 
           "J=/"J"/ AND K=/"K"/" 
         END-IF 
        END-PERFORM 
       END-PERFORM 

私はPERFORM EXITIと試みたが、それは私のために動作しません。

+0

ただ、 'GO TO'に強打します。そんなことをしたいと思っている人は、それに満足しています。 'EXIT PERFORM'はラベルがないので、ただ悪いことであることを忘れないでください。あなたの質問で何をしようとしていますか?他の言語のようにCOBOLを書く?どちら? –

+0

私はあなたが複製しようとしている実際のコードを表示する必要があると思います。 @cshneidが示しているように、これはおそらく作成された例です。 –

答えて

1

は約方法:

DisplayLabel section. 
      PERFORM VARYING J FROM 1 BY 1 UNTIL J>10 
       PERFORM VARYING K FROM 1 BY 1 UNTIL K>3 
        IF J=2 and K=2 
        EXIT SECTION 
        ELSE 
        display "LABEL A ===> PROCEDURE NOM_PROC2 " 
          "J=/"J"/ AND K=/"K"/" 
        END-IF 
       END-PERFORM 
      END-PERFORM 
exit section. 

コールとDisplayLabel部 "DisplayLabelを行う"

+0

それはうまくいくでしょう。また、 'PARAGRAPHを終了する'。私は本当にそれをプログラムで見るのは嫌です。次に、 'ALTER ... TO PROCEED TO ...'答えが必要です。 –

+0

@Marcus Sundberg 問題は、これらの二重の演技が既にセクションにあることです。 –

+0

@MohamedELKHALIFIこれがあなたの唯一の問題であれば、それを新しいSECTIONに入れてください。 –

3

あなたの質問が正しく理解されている場合は、と入力してPERFORMsEXIT PERFORMの両方を終了します。以下の手法が有効です。

01 SWITCHES. 
    05 EOL-SW PIC X VALUE 'N'. 
     88 EOL  VALUE 'Y'. 
     88 NOT-EOL VALUE 'N'. 

SET NOT-EOL TO TRUE 
PERFORM VARYING J FROM 1 BY 1 UNTIL J>10 OR EOL 
    PERFORM VARYING K FROM 1 BY 1 UNTIL K>3 OR EOL 
     IF J=2 and K=2 
      SET EOL TO TRUE 
     ELSE 
      display "LABEL A ===> PROCEDURE NOM_PROC2 " 
        "J=/"J"/ AND K=/"K"/" 
     END-IF 
    END-PERFORM 
END-PERFORM 

これまでの質問から、PL/IをCOBOLに変換していることを示しました。言葉や文章の言語と同じように、コンピュータ言語には、よく翻訳されないイディオムや口語があります。

私は論理的に、これは同等であると信じています。

PERFORM VARYING J FROM 1 BY 1 UNTIL J>2 
    PERFORM VARYING K FROM 1 BY 1 UNTIL K>2 
     display "LABEL A ===> PROCEDURE NOM_PROC2 " 
      "J=/"J"/ AND K=/"K"/" 
    END-PERFORM 
END-PERFORM 
1

AFTER変える力があなたの元のコードは、PL/Iであり、あなたの場合

perform varying j from 1 by 1 until j > 10 
     after k from 1 by 1 until k > 3 
      if j = 2 and k = 2 then 
       exit perform 
      else 
       display "j: " j ", k: " k 
      end-if 
    end-perform 

prompt$ cobc -xj exitnest.cob 
j: 01, k: 01 
j: 01, k: 02 
j: 01, k: 03 
j: 02, k: 01 
prompt$ 

COBOL 2014(案)仕様は、まあ14.9.27.2

10) At least six AFTER phrases shall be permitted in varying-phrase. 
+0

こんにちは、 私はあなたのすべての返信に感謝したいと思います。 –

+0

@MohamedELKHALIFIまあ、モハメド、StackOverflowでありがとうアップフォースから来て、受け入れるように答えの一つを選んで質問を閉じる。これは必ずしもこの答えである必要はありませんが、質問が受け入れられた答えを得たとき、SOユーザーはすべて気分が良くなります。それはキューをクリアして、すべてのことが満足に解決されたことを知らせる。 –

0

を持って行って使用してくださいプログラムの構造を変更できない場合は、GO TOを使用してください。

PL/IはSTOPRETURN(それらのいずれもがあなたの状況に適している)、LEAVEまたはGOTODOを終了することができます。

LEAVE label 

または

GOTO label 

あなたは

GO TO label 

にそれらのいずれかを変更し、同じ結果を持っているでしょう。わずかな構文の違いを除いて、既存のラベルを変更する必要はなく、ラベルの後にあるコードについて考える必要はありません。

コードの構造を変更できる場合は、すでに2つの良い答えがあります。 Brian Tiffin'sは一番ですが、cschneidはCOBOLのプログラマの大半にはっきりしています。彼らは、同じPERFORMで何度も "変わる"方法を知らないでしょう。

+0

そのコメントは、私が少し悲しかった、ビル。 :-)「PERFORM VARYING AFTER」は30歳以上です。 COBOLのプログラマーがカーゴ・カルト・プログラミングに悩まされているとは言わないでください。奇妙なエイリアンの技術が空からお菓子を落としてくれることを願って、芝生で掘られた線、竹のアンテナが付いた小屋、木製のヘッドフォンを着たマネキンなどがあります。そうではないと言ってください。私たちが3千年にすべての人を引き込むことができなければ、少なくとも過半数が1980年代半ばに対応できると考えてください。いいえ? (別のスマイリー)。 –

+1

@BrianTiffin彼らはVARYINGでも問題ありません。コード化/思考を避けるために、より良い選択肢があるときにも使用します。しかし、「AFTER」は彼らにとって未知である。私は一度も見たことがない、または「アフター」について尋ねられました。私は誰もがそれを使用しており、それを正しく使用しているからだとは思わない。 –

+0

ああ...夢を見る。 –