我收到编译错误,
在嵌套的“COPY”中找到带有“REPLACING”短语的“COPY”语句。
这是我们的编译设置,我们不能在嵌套副本中使用REPLACING动词。 我们有一本副本,它有多个复制语句和替换动词。 有人可以帮我解决这个错误吗?
答案 0 :(得分:12)
将COPYBOOKS嵌套在COBOL中是一个小技巧。一般来说
只有在没有副本的情况下才可以嵌套
包含REPLACING
短语,不会导致递归。
假设您有以下两本抄写本:
COPYBOOK ABC
01 :A:-VAR-A1 PIC X.
01 :A:-VAR-A2 PIC X.
COPY XYZ REPLACING ==:A:== BY ==B==.
和
COBPYOOK XYZ
01 :A:-VAR-X1 PIC X.
01 :A:-VAR-X2 PIC X.
不允许在COPYBOOK ABC中嵌套,因为它包含REPLACING
短语。
但是,您可以执行以下操作。从COPYBOOK ABC中删除RELACING
它变成了:
COPYBOOK ABC
01 :A:-VAR-A1 PIC X.
01 :A:-VAR-A2 PIC X.
COPY XYZ.
现在将COPYBOOK ABC包含在您的源程序中,如下所示:
REPLACE ==:A:== BY ==B==.
COPY ABC.
REPLACE OFF.
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
这是执行嵌套副本的替换的唯一“合法”方式 在我所知道的COBOL中。
答案 1 :(得分:1)
虽然Neal对他和OP正在使用的Cobol变体的回答可能是正确的,但值得注意的是,某些Cobol编译器将允许嵌套的COPY ... REPLACING
语句。
事实上,我们在代码中使用了很多实例。
例如,我有许多Cobol模块程序,它们以下列方式包含一个copymember:
COPY 'uwxxxxsel.prg' REPLACING
LEADING "xxxxSEL" BY "AREASEL".
和'uwxxxxsel.prg'copymember包含以下COPY
的另一个文件,如下所示:
COPY 'uwf8list.prg'
REPLACING LEADING 'XXXXXX-F8-' BY 'SELECT-F8-'
==FUNCTION-KEY== BY ==F8-FUNCTION-KEY==.
这很好。
我将此作为一种常用功能的“继承”结构。
但是,我们的编译器还有一个问题。嵌套REPLACING
之后,较高级别REPLACING
不会继续,但只要嵌套REPLACING
是副本成员中的最后一个,就可以了。