Вложение COPYBOOKS в COBOL - небольшая хитрость.Как правило, вы можете вложить тетради только в том случае, если они не содержат фразу REPLACING
и не вызывают рекурсию.
Предположим, у вас были следующие две тетради:
ABC COPYBOOK
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
.
Однако вы можете сделать следующее.Удалите RELACING
из COPYBOOK ABC, чтобы он стал:
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, о котором мне известно.