退出双重表演

时间:2016-04-12 16:00:30

标签: cobol

是否可以退出双重表演:

                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

我尝试过EXITI PERFORM,但它对我不起作用。

4 个答案:

答案 0 :(得分:3)

如果我正确理解了您的问题,您希望使用PERFORMs退出两个内联EXIT 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 :(得分:1)

使用VARYING AFTER执行的力量

   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.

答案 2 :(得分: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.

使用&#34调用DisplayLabel部分;执行DisplayLabel"

答案 3 :(得分:0)

好吧,如果您的原始代码是PL / I,并且如果可以避免,则您的职权范围不是更改程序的结构,那么请使用GO TO

PL / I可以退出DO STOPRETURN(这些都不适合您的情况),LEAVEGOTO

LEAVE label

GOTO label

您可以将其中任何一个更改为

GO TO label

并且结果相同。您甚至不需要更改现有标签,除了语法上的细微差别,甚至不必考虑标签后面的任何代码。

如果您能够更改代码的结构,那么您已经有了两个很好的答案。 Brian Tiffin是最好的,但对于大多数COBOL程序员来说,cschneid会更加明显,他们不会知道如何变化"不止一次在同一PERFORM