我收到编译错误,因为,
在嵌套的"COPY"中找到带有"REPLACING"短语的"COPY"语句.
这是我们的编译设置,我们不能在嵌套副本中使用REPLACING动词.我们有一本副本,它有多个复制语句和替换动词.任何人都可以帮我解决这个错误吗?
Nea*_*alB 12
将COPYBOOKS嵌套在COBOL中是一个小技巧.通常,只有当副本不包含REPLACING短语并且不会导致递归时,才可以嵌套副本.
假设您有以下两本抄写本:
COPYBOOK ABC
01 :A:-VAR-A1 PIC X.
01 :A:-VAR-A2 PIC X.
COPY XYZ REPLACING ==:A:== BY ==B==.
Run Code Online (Sandbox Code Playgroud)
和
COBPYOOK XYZ
01 :A:-VAR-X1 PIC X.
01 :A:-VAR-X2 PIC X.
Run Code Online (Sandbox Code Playgroud)
不允许在COPYBOOK ABC中嵌套,因为它包含一个REPLACING短语.
但是,您可以执行以下操作.RELACING从COPYBOOK ABC 删除它变成:
COPYBOOK ABC
01 :A:-VAR-A1 PIC X.
01 :A:-VAR-A2 PIC X.
COPY XYZ.
Run Code Online (Sandbox Code Playgroud)
现在将COPYBOOK ABC包含在您的源程序中,如下所示:
REPLACE ==:A:== BY ==B==.
COPY ABC.
REPLACE OFF.
Run Code Online (Sandbox Code Playgroud)
该REPLACE指令导致所有出现都:A:被替换,B直到REPLACE OFF遇到指令,并且这些替换在所有COPY指令被操作之后发生.上述陈述的最终结果将是:
01 B-VAR-A1 PIC X. <== from ABC
01 B-VAR-A2 PIC X. <== from ABC
01 B-VAR-X1 PIC X. <== Nested copy of XYZ from ABC
01 B-VAR-X2 PIC X. <== Nested copy of XYZ from ABC
Run Code Online (Sandbox Code Playgroud)
这是我所知道的在COBOL中执行嵌套副本的替换的唯一"合法"方式.