COBOLのCORRESPONDING句を徹底解説!初心者でもわかる同名項目のまとめ処理
生徒
「先生、COBOLで同じ名前のデータ項目をまとめて処理したいんですが、1つずつ書くのが面倒です。」
先生
「いいところに気づきましたね。そんなときに便利なのが、CORRESPONDING句(コレスポンディング句)です。」
生徒
「コレスポンディング句?それは何をしてくれるんですか?」
先生
「同じ名前を持つ項目を自動的に対応させて、一括で加算や代入ができる便利な機能なんですよ。それでは、実際の使い方を見てみましょう!」
1. CORRESPONDING句とは?
CORRESPONDING句(略してCORRとも書けます)は、COBOLの中で「同じ名前を持つ項目を自動的に対応させて処理する」ための命令です。
たとえば、2つのグループ項目(データのまとまり)があり、その中に同じ名前の変数が含まれているとき、それらをまとめて移動(MOVE)したり、加算(ADD)したりできます。
プログラミング初心者の方にもわかりやすく言うと、「同じ名前の箱の中身を自動でコピーしてくれる仕組み」です。1つずつ書かなくても、COBOLが勝手に対応を見つけてくれるのです。
2. CORRESPONDING句の基本構文
CORRESPONDING句は、主にMOVE文とADD文で使われます。構文はとてもシンプルです。
MOVE CORRESPONDING グループA TO グループB
ADD CORRESPONDING グループX TO グループY
意味:
- MOVEの場合:グループAとグループBの中で「同じ名前の項目」を見つけ、Aの値をBにコピーします。
- ADDの場合:グループXとグループYの中で「同じ名前の項目」を見つけ、Xの値をYに加えます。
3. MOVE CORRESPONDINGの実例
まずは、MOVE CORRESPONDINGを使って、同名項目をまとめてコピーする例を見てみましょう。
IDENTIFICATION DIVISION.
PROGRAM-ID. MOVE-CORR-DEMO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 GROUP-A.
05 NAME PIC A(10) VALUE "TANAKA".
05 AGE PIC 9(2) VALUE 25.
05 ADDRESS PIC A(20) VALUE "TOKYO".
01 GROUP-B.
05 NAME PIC A(10) VALUE SPACES.
05 AGE PIC 9(2) VALUE 0.
05 ADDRESS PIC A(20) VALUE SPACES.
05 PHONE PIC 9(10) VALUE 0.
PROCEDURE DIVISION.
MOVE CORRESPONDING GROUP-A TO GROUP-B.
DISPLAY "名前:" NAME OF GROUP-B.
DISPLAY "年齢:" AGE OF GROUP-B.
DISPLAY "住所:" ADDRESS OF GROUP-B.
DISPLAY "電話:" PHONE OF GROUP-B.
STOP RUN.
このプログラムの実行結果は次のようになります。
名前:TANAKA
年齢:25
住所:TOKYO
電話:0000000000
GROUP-AとGROUP-Bの中で「同じ名前(NAME・AGE・ADDRESS)」の項目だけが自動的にコピーされています。
電話番号(PHONE)はGROUP-Aには存在しないため、移動されません。
4. ADD CORRESPONDINGの実例
ADD CORRESPONDINGを使うと、同じ名前の数値項目をまとめて加算できます。銀行の残高や集計処理などでよく使われます。
IDENTIFICATION DIVISION.
PROGRAM-ID. ADD-CORR-DEMO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 SALES-MONTH1.
05 ITEM-A PIC 9(5) VALUE 100.
05 ITEM-B PIC 9(5) VALUE 200.
05 ITEM-C PIC 9(5) VALUE 300.
01 SALES-MONTH2.
05 ITEM-A PIC 9(5) VALUE 400.
05 ITEM-B PIC 9(5) VALUE 500.
05 ITEM-C PIC 9(5) VALUE 600.
PROCEDURE DIVISION.
ADD CORRESPONDING SALES-MONTH1 TO SALES-MONTH2.
DISPLAY "1月と2月の合計売上:".
DISPLAY "商品A:" ITEM-A OF SALES-MONTH2.
DISPLAY "商品B:" ITEM-B OF SALES-MONTH2.
DISPLAY "商品C:" ITEM-C OF SALES-MONTH2.
STOP RUN.
実行結果は次のようになります。
1月と2月の合計売上:
商品A:500
商品B:700
商品C:900
このように、同名項目が自動で対応づけられて加算されます。 個別に「ADD ITEM-A OF SALES-MONTH1 TO ITEM-A OF SALES-MONTH2」と書く必要がなくなります。
5. CORRESPONDING句のルールと注意点
とても便利なCORRESPONDING句ですが、使うときはいくつかのルールと注意点があります。
- 同じ階層(レベル番号)の項目でなければ一致しません。
- 名前が完全に一致している項目だけが対象になります(スペル違いもNG)。
- 項目の型(数値か文字か)が異なると正しく動作しません。
REDEFINESやOCCURSを含む項目には注意が必要です。
特に、現場のCOBOLシステムでは、変数名に少しの違い(例:TOTAL-AMTとTOTAL-AMOUNT)があるだけで対応できないことがあるため、設計段階から命名規則を統一しておくことが重要です。
6. CORRの省略形について
COBOLでは、CORRESPONDINGを短くしてCORRと書くことができます。意味はまったく同じです。
MOVE CORR GROUP-A TO GROUP-B
ADD CORR SALES-MONTH1 TO SALES-MONTH2
プログラムの可読性(読みやすさ)を重視する場合は、CORRESPONDINGと書くほうがわかりやすいですが、短くしたいときはCORRを使っても問題ありません。
7. まとめて処理できる便利さ
CORRESPONDING句の最大のメリットは、「同名項目を一括で処理できる」ということです。これにより、プログラムがスッキリして読みやすくなり、入力ミスも減らせます。
特に、給与計算・売上集計・データ移行などのように、同じ構造のデータを扱う業務システムでは非常に役立ちます。 COBOLの強力な特徴である「構造化されたデータ操作」を活かす代表的な機能のひとつと言えるでしょう。