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

标签 if-statement cobol cics

下午好, 我正在分析 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/

相关文章:

db2 - 大型机 - 更改的文件名的扩展名后缀的名称是什么?

java - IBM WESB/WAS JCA 安全配置

c++ - 缩短 C++ If 条件

PHP:如何运行此 IF 语句

c - do while not execution, 意外终止

java - 在 IBM Liberty Profile 中使用 Executor Service 进行多线程处理

java - JZOS 批处理工具包 - 集成 JZOS Cobol 记录生成器

r - R 中的嵌套 if-else 循环

boolean - 如何在 COBOL 中返回 true

C -> 大型机上的 COBOL 跨语言通信