COBOL中"REPLACING"的"COPY"语句

Sai*_*sha 5 cobol mainframe

我收到编译错误,因为,

在嵌套的"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中执行嵌套副本的替换的唯一"合法"方式.