COBOL中“REPLACING”的“COPY”语句

时间:2011-09-12 10:14:02

标签: cobol mainframe

我收到编译错误,

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

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

2 个答案:

答案 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是副本成员中的最后一个,就可以了。