&引用;“复制”;带“的声明;取代;在COBOL中
我得到的编译错误如下: 在嵌套的“COPY”中找到带有“replacement”短语的“COPY”语句 这是我们的编译设置,不能在嵌套副本中使用替换谓词。 我们有一个抄本,它有多个替换动词的复制语句。&引用;“复制”;带“的声明;取代;在COBOL中,cobol,mainframe,Cobol,Mainframe,我得到的编译错误如下: 在嵌套的“COPY”中找到带有“replacement”短语的“COPY”语句 这是我们的编译设置,不能在嵌套副本中使用替换谓词。 我们有一个抄本,它有多个替换动词的复制语句。 有人能帮我解决这个错误吗?在COBOL中嵌套copybook是一个小技巧。一般来说 只有在抄写本不存在的情况下,你才可以将其嵌套 包含替换短语,不要导致递归 假设您有以下两本文案: 抄本ABC 01 :A:-VAR-A1 PIC X. 01 :A:-VAR-A2 PIC X
有人能帮我解决这个错误吗?在COBOL中嵌套copybook是一个小技巧。一般来说 只有在抄写本不存在的情况下,你才可以将其嵌套 包含
替换
短语,不要导致递归
假设您有以下两本文案:
抄本ABC
01 :A:-VAR-A1 PIC X.
01 :A:-VAR-A2 PIC X.
COPY XYZ REPLACING ==:A:== BY ==B==.
01 :A:-VAR-A1 PIC X.
01 :A:-VAR-A2 PIC X.
COPY XYZ.
及
COBPYOOK XYZ
01 :A:-VAR-X1 PIC X.
01 :A:-VAR-X2 PIC X.
不允许在COPYBOOK ABC中嵌套,因为它包含一个替换短语
但是,您可以执行以下操作。从复印本ABC so中删除relating
它变成:
抄本ABC
01 :A:-VAR-A1 PIC X.
01 :A:-VAR-A2 PIC X.
COPY XYZ REPLACING ==:A:== BY ==B==.
01 :A:-VAR-A1 PIC X.
01 :A:-VAR-A2 PIC X.
COPY XYZ.
现在,将COPYBOOK ABC包括到源程序中,如下所示:
REPLACE ==:A:== BY ==B==.
COPY ABC.
REPLACE OFF.
COPY 'uwf8list.prg'
REPLACING LEADING 'XXXXXX-F8-' BY 'SELECT-F8-'
==FUNCTION-KEY== BY ==F8-FUNCTION-KEY==.
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
01 B-VAR-A1 PIC X.虽然Neal的答案对于他和OP使用的Cobol变体可能是正确的,但值得注意的是,一些Cobol编译器将允许嵌套的复制。。。替换
语句
事实上,我们有很多在代码中使用这个的实例
例如,我有许多Cobol模块程序,其中包括以下方式的copymember:
COPY 'uwxxxxsel.prg' REPLACING
LEADING "xxxxSEL" BY "AREASEL".
“uwxxxsel.prg”copymember包含另一个文件的以下副本,如下所示:
REPLACE ==:A:== BY ==B==.
COPY ABC.
REPLACE OFF.
COPY 'uwf8list.prg'
REPLACING LEADING 'XXXXXX-F8-' BY 'SELECT-F8-'
==FUNCTION-KEY== BY ==F8-FUNCTION-KEY==.
这个很好用
我使用它作为一种常见功能的“继承”结构
不过,我们的编译器有一个问题。在嵌套的替换之后,较高级别的替换
不会继续,但是只要嵌套的替换
是copymember中的最后一件事,就可以了。错误消息说明了一切。尝试取消嵌套副本。显示一些代码以获得更多帮助。(我使用cobol已经快30年了,我从没想过人们还在使用它:-)我们可以取消文案的嵌套。但是为了代码的可重用性,我们用这种方式创建了它。我只是想寻找有没有其他方法可以做到这一点。我的COBOL PGM包含:复制ABC。而抄写本ABC有,复制XYZ替换==:A:==由==B-=。复制PQR替换==:A:==由==B-==。COPY LMN replacement==:A:==BY==B-==。From:COPY语句可以嵌套。但是,a)嵌套复制语句不能包含替换短语,并且具有替换短语的复制语句不能包含嵌套复制语句b)嵌套复制语句不能导致递归。但不建议使用嵌套的复制语句,因为它会影响程序的可读性。非常感谢Neal:)我尝试了上述解决方案,效果很好,解决了我的问题。非常感谢您节省了大量工作和冗余编码:)