cobol移动声明

时间:2012-04-30 13:08:39

标签: cobol

说我有一个02级变量作为cobybook(testcopy)的一部分

02 level-1-var
   05 var-1
   05 var-2
   05 var-3
   05 var-4

我在我的程序中使用过两次这本字帖。

01  usage-1.
    copy testcopy.

01  usage-2.
    copy testcopy.

我现在想要将 2级05使用-1的变量移动到usage-2。 有什么方法可以避免2个移动陈述吗?

并使用类似

的内容
 MOVE (var-2, var-3) of usage-1   TO 
 (var-2, var-3) of usage-2

我是cobol的新手并且想知道是否可以这样做..这可以在我的程序中保存很多移动语句..(提高性能)

3 个答案:

答案 0 :(得分:5)

不,不是在标准的COBOL中,尽管某些实现可能会有类似的扩展。如果简洁的代码是您的要求之一,我可能不会选择COBOL作为理想的语言: - )

你可能需要在两个方面做到这一点:

move var-2 of usage-1 to var-2 of usage-2.
move var-3 of usage-1 to var-3 of usage-2.

如果您愿意对您的字帖进行一些更改,例如(a)

02  level-1-var
    05  var-1
    05  var-2-and-3
        09  var-2
        09  var-3
    05  var-4

你可能会发现你可以这样做:

move var-2-and-3 of usage-1 to var-2-and-3 of usage-2.

(a)显然,我只是反映了你在问题中所拥有的内容。您几乎肯定需要pic个关于该数据的条款(可能还有一些.个字符。)

答案 1 :(得分:2)

这种要求直接由MOVE CORRESPONDING动词回答。 MOVE CORRESPONDING为其操作数采用组级别,并将类似命名的基本项目从一个移动到另一个,具有几个限制,包括类似数据类(即,没有混合的字母数字和数字)。您的实施的精细手册包含所有限制。

如果我没记错的话,MOVE CORRESPONDING也是一个可选功能,因此有些编译器可能不支持它。

移动对应并且您的请求是在COBOL世界中引发强烈意见的那些事情之一。有人说你应该使用COPY REPLACING生成唯一的数据名称并编码所有的MOVE。其他人说你做的很好。我认为“这取决于”。如果它是一个非常简单的程序,我可能会采用MOVE CORRESPONDING路径,但如果有重要的业务逻辑,那么我宁愿编写所有代码。

答案 2 :(得分:0)

您最好的选择是制作您的字帖,使每个字段都有一个“前缀”,然后使用REPLACING为不同的COPY语句提供不同的前缀。然后你不必为所有字段编写OF / IN代码,它将使程序和列表更清晰。

Paxdiablo是做你想做的最好的方式,虽然你想做的原因会很有趣。

我很惊讶没有人提到“参考修改”:

MOVE usage-1 ( 3 : 5 ) TO usage-2 ( 3 : 5)

其中3是数据中的起始位置,5是长度。我更喜欢Paxdiablo对此的定义。

没有人建议RENAMES,这并不奇怪。

   01  A-TABLE. 
       05  A-T-1 PIC XX. 
       05  A-T-2 PIC X. 
       05  A-T-3 PIC 9. 
       05  A-T-4 PIC XXX. 
       05  A-T-5 PIC X(4). 
       66 A-TABLE-EXTRA RENAMES A-T-2 THRU A-T-3. 
   01  B-TABLE. 
       05  B-T-1 PIC XX. 
       05  B-T-2 PIC X. 
       05  B-T-3 PIC 9. 
       05  B-T-4 PIC XXX. 
       05  B-T-5 PIC X(4). 
       66 B-TABLE-EXTRA RENAMES B-T-2 THRU B-T-3. 

       MOVE A-TABLE-EXTRA TO B-TABLE-EXTRA

与MOVE CORRESPONDING一样,这是应该避免的(与我的评论相同的原因,加上没有人使用Level 66,所以没有人知道他们做了什么)。

另外一种方法是通过REDEFINES为你的每个级别01,但为什么甚至去打扰。