2012-04-30 34 views
2

说,我有一个02级变量cobybook(testcopy)的一部分COBOL移动语句

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的varibale到使用-2。 有什么办法可以避免2个移动语句?

,并使用类似

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

我是新来的COBOL,想知道是否可以这样做。这可以节省大量的举动语句在我的计划。(提高性能)

+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. 

如果你愿意做一点改变的你的字帖,像(一)

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. 

(一)很显然,我只是反映你的问题有什么。您几乎可以肯定需要该数据中的pic子句(可能还有一些.字符)。

2

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

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

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

+1

您正在寻找的解决方案是两个答案的组合。将相应的var-2和-3 OF用法-1移至var-2和-3 OF的用法-2。而MOVE CORRESPONDING的+1仅适用于简单的一次性程序。 –

+0

四年后,感谢upvote,我看到了这个评论。 :)我忘记了OF子句,虽然我不知道这是否是'85增强,我的COBOL学习的大部分是'74'。 – zarchasmpgmr

0

最好的办法是制作你的副本,以便每个字段都有一个“前缀”,然后使用REPLACING为不同的COPY语句提供不同的前缀。那么你不必为所有的字段编写OF/IN,它会使程序和列表更清晰。

Paxdiablo's是最好的方式来做你想做的事情,虽然你想做它的原因会很有趣。

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

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相应的,这是要避免的(同样的理由,我的意见,再加上没有人使用等级66的,所以没有人知道他们在做什么)。

另一种方法是通过REDEFINES为每个Level 01s,但为什么甚至去那个麻烦。