gpt4 book ai didi

if-statement - IF 语句主体中的 CICS 语句

转载 作者:行者123 更新时间:2023-12-04 04:19:14 26 4
gpt4 key购买 nike

下午好,我正在分析 COBOL 中的一些遗留代码,发现了这个我无法理解的特定案例。

000610     IF EIBCALEN = 0                                              00061011
000700 EXEC CICS 00070000
000800 SEND MAP('TCHM144') 00080007
001100 END-EXEC. 00110000
001110 ELSE 00111013
001111 IF EIBAID = DFHCLEAR OR DFHPF2 OR DFHPF3 00111113
001112 EXEC CICS SEND FROM(WS-CHAR) 00111213
001113 LENGTH(LENGTH OF WS-CHAR) 00111313
001114 ERASE 00111413
001115 END-EXEC. 00111513
001116 EXEC CICS RETURN END-EXEC. 00111613
001120* MAPONLY ERASE FREEKB 00112002
001200 EXEC CICS 00120000
001300 RETURN TRANSID('TCE4') 00130000
001400 END-EXEC. 00140000
001500 GOBACK. 00150012

据我所知,在 IF 语句的正文中有一个句点会在最高级别关闭 IF 之前的句子,但在这种情况下,IF 正文中包含的 END-EXEC 后面跟着一个句点,以下是上面提到的逻辑将结束句子,ELSE 将不会被引用到任何 IF。我是正确的还是在特定情况下可以这样做?谢谢。

最佳答案

整个EXEC结束分隔符期间的语句将被代码替换。这类似于 COPY 发生的情况。声明。在下面,COPY语句复制包含没有分隔符的简单添加指令的文本。在预处理期间,COPY语句替换为文本。 EXEC 也是如此声明。只要EXEC语句不引入任何分隔句点,规则为COBOL关于 sentence 的结尾不适用。

正如@cschneid 所建议的那样,查看 list 以了解对该源代码做了什么。

以下是 COPY 的示例声明。请注意,分隔符句点对编译没有影响。


来源:

   data division.
working-storage section.
1 a pic 9 value 0.
1 b pic 9 value 0.
procedure division.
begin.
display 'A: ' a
display 'B: ' b
if a = b
copy a.
else
copy b.
end-if
display 'A: ' a
display 'B: ' b
stop run
.

列表:

     1 data division.
2 working-storage section.
3 1 a pic 9 value 0.
4 1 b pic 9 value 0.
5 procedure division.
6 begin.
7 display 'A: ' a
8 display 'B: ' b
9 if a = b
* 10 copy a.
11 add 1 to a
12 else
* 13 copy b.
14 add 1 to b
15 end-if
16 display 'A: ' a
17 display 'B: ' b
18 stop run
19 .

输出:

A: 0
B: 0
A: 1
B: 0

关于if-statement - IF 语句主体中的 CICS 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58914680/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com