退出双重表演
Exit a double perform
是否可以退出双人表演:
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,但它对我不起作用。
如果我对你的问题的理解正确,你想退出 both 内联 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
使用执行后变化的力量
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.
好吧,如果你的原始代码是 PL/I 并且你的职责是在可以避免的情况下不改变程序的结构,那么使用 GO TO
.
PL/I 可以使用 STOP
、RETURN
(这两种都不适合您的情况)、LEAVE
或 GOTO
.
LEAVE label
或
GOTO label
您可以将其中任何一个更改为
GO TO label
并且有相同的结果。您甚至不需要更改现有标签,除了语法上的微小差异,甚至不必考虑标签后的任何代码。
如果您能够更改代码的结构,那么您已经有了两个很好的答案。 Brian Tiffin 的是最简洁的,但 cschneid 对大多数 COBOL 程序员来说更明显,他们不知道如何 "vary" 在同一个 PERFORM
.
上多次 "vary"
怎么样:
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.
使用 "perform DisplayLabel"
调用 DisplayLabel 部分
是否可以退出双人表演:
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,但它对我不起作用。
如果我对你的问题的理解正确,你想退出 both 内联 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
使用执行后变化的力量
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.
好吧,如果你的原始代码是 PL/I 并且你的职责是在可以避免的情况下不改变程序的结构,那么使用 GO TO
.
PL/I 可以使用 STOP
、RETURN
(这两种都不适合您的情况)、LEAVE
或 GOTO
.
LEAVE label
或
GOTO label
您可以将其中任何一个更改为
GO TO label
并且有相同的结果。您甚至不需要更改现有标签,除了语法上的微小差异,甚至不必考虑标签后的任何代码。
如果您能够更改代码的结构,那么您已经有了两个很好的答案。 Brian Tiffin 的是最简洁的,但 cschneid 对大多数 COBOL 程序员来说更明显,他们不知道如何 "vary" 在同一个 PERFORM
.
怎么样:
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.
使用 "perform DisplayLabel"
调用 DisplayLabel 部分