4

稀にcobol のいいところを言うと、よく「コピー対応」(と「ムーブ対応」) と言われます

これらについてもっと知りたいのですが、それらのセマンティクスは何ですか? それは次と同じですか:

(Perl)

for my $key (keys %foo) {
    $bar{key} = $foo{key} if exists $bar{key};
}

それとももっと深い何かがありますか?COBOL レコードは厳密に型指定されていますよね? それはどのように機能しますか?

4

2 に答える 2

4

AcuCOBOLのドキュメント(私が使用しています)によると:

CORRESPONDING 指定を使用すると、source-group 内の選択された基本項目が dest-group 内の対応する項目に移動されます。これは一連の形式 1 MOVE ステートメントとして扱われ、データ項目の対応するペアごとに 1 つです。

フォーマット 1 の移動は次のようになります。

MOVE source-item TO {dest-item}

次のファイルと作業領域の定義が与えられた場合

DATA DIVISION.
FILE SECTION.
FD  PRODUCT-INFO-FILE.
01  PRODUCT-INFO-RECORD.
    03 PI-HOLD-PROD                 PIC  x(12).
    03 PI-HOLD-DESC                 PIC  x(30).
    03 PI-HOLD-DISC                 PIC  9(01).
    03 PI-HOLD-TOTAL                PIC  9(08)V99.

WORKING-STORAGE SECTION.
01  HOLD-FIELDS-DEST.
    03 WS-HOLD-PROD                 PIC  x(12).
    03 WS-HOLD-DESC                 PIC  x(30).
    03 WS-HOLD-DISC                 PIC  9(01).
    03 WS-HOLD-TOTAL                PIC  9(08)V99.

これを行う:

MOVE CORRESPONDING PRODUCT-INFO-RECORD TO HOLD-FIELDS-DEST.

これを行うのと同じです:

MOVE PI-HOLD-PROD  TO WS-HOLD-PROD.
MOVE PI-HOLD-DESC  TO WS-HOLD-DESC.
MOVE PI-HOLD-DISC  TO WS-HOLD-DISC.
MOVE PI-HOLD-TOTAL TO WS-HOLD-TOTAL.

これにより、3 行のコードが節約されました。多くのファイルはそれよりも幅が広くなっています。

編集:これも同じ一連のドキュメントからのものです...

次の表は、MOVE ステートメントで許可される source-item と dest-item の組み合わせの概要を示しています。表の数字は、各組み合わせが説明されているこのセクションの「一般規則」の数字です。

Sending Category:   Receiving Item Category:
                    Alphabetic  Alphanumeric/Alphanumeric Edited    Numeric /Numeric Edited
Alphabetic          Yes (12)    Yes (13)                            No (15)
Alphanumeric        Yes (12)    Yes (13)                            Yes (14)
Alphanumeric Edited Yes (12)    Yes (13)                            No (15)
Numeric Integer     No (15)     Yes (13)                            Yes (14)
Numeric
Non-integer         No (15)     No (15)                             Yes (14)
Numeric Edited      No (15)     Yes (13)                            Yes (14)

'12. dest-item がアルファベット順の場合、標準の整列規則に従って位置合わせとスペースの埋め込みが行われます。

'13. dest-item が英数字または英数字編集されている場合、標準の配置規則に従って位置合わせとスペースの埋め込みが行われます。source-item が符号付き数値の場合、操作符号は移動されません。記号が別の文字位置を占めている場合、その記号文字は移動されず、source-item のサイズは 1 つ小さいものとして扱われます。

'14. dest-item が数値または数値編集の場合、標準の位置合わせ規則に従って、小数点の位置合わせとゼロの埋め込みが行われます。source-item が署名されていない場合は、正として扱われます。dest-item が unsigned の場合、source-item の絶対値が移動されます。dest-item が署名されている場合、その符号は source-item の符号に設定されます。source-item が数値編集されている場合は、最初に dest-item が同じ数値を受け取るように「編集解除」されます。

'15. 次の移動は不正です。英字または英数字の編集データ項目は、数値または数値の編集データ項目に移動できません。数値または数値編集データ項目を英字項目に移動することはできません。非整数の数値データ項目は、英数字または英数字の編集済みデータ項目に移動できません。

于 2009-09-17T17:31:33.710 に答える
4

実際には、「MOVE CORRESPONDING」が機能するには、要素名がまったく同じでなければなりません。私が使用しているコンピューターは、「MOVE CORR」のショートカットを使用しています。例を探していたときに、実際に「ADD CORR」を見ました。

DATA DIVISION.
FILE SECTION.
FD  PRODUCT-INFO-FILE.
01  PRODUCT-INFO-RECORD.
    03 PI-HOLD-PROD                 PIC  x(12).
    03 PI-HOLD-DESC                 PIC  x(30).
    03 PI-HOLD-DISC                 PIC  9(01).
    03 PI-HOLD-TOTAL                PIC  9(08)V99.

WORKING-STORAGE SECTION.
01  HOLD-FIELDS-DEST.
    03 PI-HOLD-PROD                 PIC  x(12).
    03 PI-HOLD-DESC                 PIC  x(30).
    03 PI-HOLD-DISC                 PIC  9(01).
    03 PI-HOLD-TOTAL                PIC  9(08)V99.

'01' レベルで修飾されているため、同じ名前の変数が複数存在する可能性があります。2 つのフィールドのいずれかを参照するには、PI-HOLD-PROD OF HOLD-FIELDS-DEST と指定する必要があります。

すべての値を移動するには、次を使用します

MOVE CORRESPONDING PRODUCT-INFO-RECORD TO HOLD-FIELDS-DEST.

これは、新しいレコードまたは変数でフィールドを移動するときに非常に便利です。

01 WS-DATE-YMD.
   03  YY             PIC 99.
   03  MM             PIC 99.
   03  DD             PIC 99.

01 WS-DATE-MDY.
   03  MM             PIC 99.
   03  FILLER         PIC X VALUE "/".
   03  DD             PIC 99.
   03  FILLER         PIC X VALUE "/".
   03  YY             PIC 99.


MOVE CORR WS-DATE-YMD TO WS-DATE-MDY.
于 2009-09-18T22:40:03.070 に答える