COBOL 中带有“REPLACING”的“COPY”语句
Posted
技术标签:
【中文标题】COBOL 中带有“REPLACING”的“COPY”语句【英文标题】:"COPY" statement with "REPLACING" in COBOL 【发布时间】:2011-09-12 10:14:02 【问题描述】:我收到编译错误,
在嵌套的“COPY”中找到带有“REPLACING”短语的“COPY”语句。
这是我们的编译设置,我们不能在嵌套副本中使用 REPLACING 动词。 我们有一本抄写本,其中包含多个带有替换动词的复制语句。 谁能帮我解决这个错误?
【问题讨论】:
错误信息说明了一切。尝试取消嵌套副本。显示一些代码以获得更多帮助。 (大约 30 年前,我与 cobol 合作过,我从没想过人们还在使用它 :-) 我们可以取消嵌套copybook..但是为了代码的可重用性,我们以这种方式创建了它。我只是想搜索是否有其他方法可以做到这一点。我的 COBOL PGM 包含:COPY ABC。和 Copybook ABC 有,COPY XYZ REPLACING ==:A:== BY ==B-==。复制 PQR 替换 ==:A:== BY ==B-==。复制 LMN 替换 ==:A:== BY ==B-==。 来自mainframegurukul.com/tutorials/programming/cobol/…:COPY 语句可以嵌套。但是,a) 嵌套的 COPY 语句不能包含 REPLACING 短语,带有 REPLACING 短语的 COPY 语句不能包含嵌套的 COPY 语句 b) 嵌套的 COPY 语句不会导致递归。但是不建议使用嵌套的 COPY 语句,因为它会影响程序的可读性。 【参考方案1】:在 COBOL 中嵌套 COPYBOOKS 有点小技巧。一般来说
只有当它们不嵌套时,您才可以嵌套字帖
包含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 中。
【讨论】:
非常感谢 Neal :) 我尝试了上述解决方案,它工作正常并解决了我的问题。非常感谢您节省了大量的精力和多余的编码:)【参考方案2】:虽然 Neal 的回答对于他和 OP 正在使用的 Cobol 变体可能是正确的,但值得注意的是,一些 Cobol 编译器将允许嵌套 COPY ... REPLACING
语句。
确实,我们有很多在代码中使用它的实例。
例如,我有许多 Cobol 模块程序,其中包含以下方式的 copymember:
COPY 'uwxxxxsel.prg' REPLACING
LEADING "xxxxSEL" BY "AREASEL".
并且“uwxxxxsel.prg”复制成员包含另一个文件的以下COPY
,如下所示:
COPY 'uwf8list.prg'
REPLACING LEADING 'XXXXXX-F8-' BY 'SELECT-F8-'
==FUNCTION-KEY== BY ==F8-FUNCTION-KEY==.
这很好用。
我将其用作通用功能的一种“继承”结构。
不过,我们的编译器有一个问题。更高级别的REPLACING
在嵌套的REPLACING
之后不会继续,但是只要嵌套的REPLACING
是copymember 中的最后一个,就可以了。
【讨论】:
以上是关于COBOL 中带有“REPLACING”的“COPY”语句的主要内容,如果未能解决你的问题,请参考以下文章
77 关于 java.util.concurrent.RejectedExecutionException:Thread limit exceeded replacing blocked worker
77 关于 java.util.concurrent.RejectedExecutionException:Thread limit exceeded replacing blocked worker
77 关于 java.util.concurrent.RejectedExecutionException:Thread limit exceeded replacing blocked worker