2

cobybook (testcopy) の一部として 02 レベル変数が 1 つあるとします。

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

このコピーブックをプログラムで 2 回使用します。

01  usage-1.
    copy testcopy.

01  usage-2.
    copy testcopy.

現在、使用法 1 のレベル 05 変数を 2 つだけ使用法 2に移動したいと考えています。2 つの move ステートメントを回避する方法はありますか?

そして次のようなものを使用します

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

私はcobolを初めて使用し、これができるかどうか疑問に思っていました..これにより、プログラム内の多くのmoveステートメントを節約できます..(パフォーマンスが向上します)

4

3 に答える 3

5

いいえ、標準の COBOL ではありませんが、一部の実装では、その種の拡張機能が含まれている可能性があります。簡潔なコードが要件の 1 つであれば、理想的な言語として COBOL を選択しなかったでしょう :-)

あなたはおそらく2つでそれを行う必要があります:

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ほとんどの場合、そのデータには節が必要になります (おそらくさらにいくつかの.文字も必要になります)。

于 2012-04-30T13:20:06.777 に答える
2

このタイプの要件は、MOVE CORRESPONDING 動詞によって直接回答されます。MOVE CORRESPONDING は、そのオペランドにグループ レベルを取り、同様のデータ クラスを含むいくつかの制限 (つまり、英数字と数字を混在させない) を使用して、同様の名前の基本項目をある要素から別の要素に移動します。実装の詳細マニュアルには、すべての制限が含まれています。

私の記憶が正しければ、MOVE CORRESPONDING もオプション機能であるため、一部のコンパイラではサポートされていない可能性があります。

MOVE CORRESPONDING とあなたの要求は、COBOL の世界で強い意見を引き起こすものの 1 つです。COPY REPLACING を使用して一意のデータ名を生成し、すべての MOVE をコーディングする必要があると言う人もいます。他の人は、あなたがしていることは大丈夫だと言います。「場合による」というのが私の見解です。非常に単純なプログラムであれば、MOVE CORRESPONDING パスを使用することもありますが、重要なビジネス ロジックがある場合は、むしろすべてをコーディングします。

于 2012-05-01T22:03:19.070 に答える
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 と同様に、これは避けるべきです (私のコメントと同じ理由に加えて、誰もレベル 66 を使用していないため、彼らが何をしているのか誰も知りません)。

もう 1 つの方法は、Level 01 ごとに REDEFINES を実行することですが、わざわざわざわざ行く必要はありません。

于 2013-04-09T12:59:02.230 に答える