2012-04-30 69 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,但爲什麼甚至去那個麻煩。