是否可以退出双重表演:
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,但它对我不起作用。
答案 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
STOP
,RETURN
(这些都不适合您的情况),LEAVE
或GOTO
LEAVE label
或
GOTO label
您可以将其中任何一个更改为
GO TO label
并且结果相同。您甚至不需要更改现有标签,除了语法上的细微差别,甚至不必考虑标签后面的任何代码。
如果您能够更改代码的结构,那么您已经有了两个很好的答案。 Brian Tiffin是最好的,但对于大多数COBOL程序员来说,cschneid会更加明显,他们不会知道如何变化"不止一次在同一PERFORM
。