&引用;“复制”;带“的声明;取代;在COBOL中

&引用;“复制”;带“的声明;取代;在COBOL中,cobol,mainframe,Cobol,Mainframe,我得到的编译错误如下: 在嵌套的“COPY”中找到带有“replacement”短语的“COPY”语句 这是我们的编译设置,不能在嵌套副本中使用替换谓词。 我们有一个抄本,它有多个替换动词的复制语句。 有人能帮我解决这个错误吗?在COBOL中嵌套copybook是一个小技巧。一般来说 只有在抄写本不存在的情况下,你才可以将其嵌套 包含替换短语,不要导致递归 假设您有以下两本文案: 抄本ABC 01 :A:-VAR-A1 PIC X. 01 :A:-VAR-A2 PIC X

我得到的编译错误如下:

在嵌套的“COPY”中找到带有“replacement”短语的“COPY”语句

这是我们的编译设置,不能在嵌套副本中使用替换谓词。 我们有一个抄本,它有多个替换动词的复制语句。
有人能帮我解决这个错误吗?

在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:)我尝试了上述解决方案,效果很好,解决了我的问题。非常感谢您节省了大量工作和冗余编码:)