徹底解説!一歩先を行くCOBOL言語のCOPY文活用法 | 応用ガイド

COBOL(コボル)言語の予約語COPY文を使った活用法とは

COBOL(コボル)言語のCOPY文とは

COPY文は、COBOLプログラムの任意の箇所に、指定したファイルの内容を挿入することができます。指定したファイルが挿入されるのは、コンパイル時のみとなります。

また、ファイル挿入時にファイルの内容を指定した置換文字列に置き換えることも可能です。COPY文は主に入出力ファイルやレポートファイルなどのファイルのレイアウトを構成する項目を指定している箇所(DATA DIVISION内)で定義します。

複数のプログラムで同じファイルレイアウトを使用するときに、レイアウトに変更が合った場合、全てのファイルを修正して再コンパイル、テストなどを行わなければ行けません。

そのため、外部に定義しているレイアウト用のファイルをCOPY文で読み込む処理にしておけば、レイアウトの変更は外部ファイルのみで済みます。

修正箇所を全て手入力で修正すると、どこかで不具合が発生する可能性もありますので、誤動作を防止するためにも変更の可能性のあるレイアウト用の項目は、外部ファイルに定義してCOPY文を使用して読み込むことをおすすめします。

COBOL(コボル)言語のファイルのCOPY文について

ここでは、COBOLのCOPY文の動作を見ていきましょう。

書き方1:外部ファイルをそのまま挿入
COPY 外部ファイル名.

書き方2:外部ファイルの一部を置換して挿入
COPY 外部ファイル名 REPLACING ==置き換え前文字列== BY ==置き換え後文字列 ==.

■プログラム例
ご紹介するサンプルプログラムは、COPY文でデータ項目が記載された外部ファイルを指定し、外部ファイルの内容をコピーして、外部ファイルで定義されたデータ項目が使用できるか確認するプログラムです。

COPY文で指定する外部ファイルは以下のように記述します。

外部ファイル名:IN-MASTER-FILE
ファイルの内容:
01 ITEM-RECORD.
  03 ITEM-DATA-1  PIC X(30).
  03 ITEM-DATA-2  PIC X(30).
  03 NUM-1  PIC 9(03).
  03 NUM-2  PIC 9(03).

外部ファイル置き換え前:

  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. COPY_SAMPLE01.
  3. ENVIRONMENT DIVISION.
  4. INPUT-OUTPUT SECTION.
  5. DATA DIVISION.
  6. WORKING-STORAGE SECTION.
  7. *>------------------------------
  8. *> コピーするファイルを指定する
  9. *>------------------------------
  10. COPY IN-MASTER-FILE.
  11. PROCEDURE DIVISION.
  12. *>------------------------------
  13. *> 値を指定
  14. *>------------------------------
  15. MOVE "COPY TEST" TO ITEM-DATA-1.
  16. MOVE 100 TO NUM-1.
  17. DISPLAY "ITEM-DATA-1 : "ITEM-DATA-1.
  18. DISPLAY "NUM-1 : "NUM-1.
  19. STOP RUN.

このプログラムをコンパイルすると、実行ファイルに外部ファイルの内容が挿入されます。

以下のように「COPY IN-MASTER-FILE.」以下に外部ファイルの内容が挿入されます。

外部ファイル置き換え後:

  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. COPY_SAMPLE01.
  3. ENVIRONMENT DIVISION.
  4. INPUT-OUTPUT SECTION.
  5. DATA DIVISION.
  6. WORKING-STORAGE SECTION.
  7. *>------------------------------
  8. *> コピーするファイルを指定する
  9. *>------------------------------
  10. *>COPY IN-MASTER-FILE.
  11. 01 ITEM-RECORD.
  12. 03 ITEM-DATA-1 PIC X(30).
  13. 03 ITEM-DATA-2 PIC X(30).
  14. 03 NUM-1 PIC 9(03).
  15. 03 NUM-2 PIC 9(03).
  16.  
  17. PROCEDURE DIVISION.
  18. *>------------------------------
  19. *> 値を指定
  20. *>------------------------------
  21. MOVE "COPY TEST" TO ITEM-DATA-1.
  22. MOVE 100 TO NUM-1.
  23. DISPLAY "ITEM-DATA-1 : " ITEM-DATA-1.
  24. DISPLAY "NUM-1 : " NUM-1.
  25. STOP RUN.

※COPY文は元のソースファイルの内容を書き換えるのではなく、コンパイルして作成された実行ファイルの内容を置き換えます。

作成された実行ファイルを実行すると、外部ファイルで定義されているITEM-DATA-1やNUM-1のデータ項目が使用できることがわかります。

実行結果:
応用-COPY-実行例1

COBOL(コボル)言語のCOPY文の応用的な使い方

ここではCOPY文の応用的な使い方を紹介します。
COPY文のオプションのREPLACINGを指定して、外部ファイルの内容を一部置き換えて出力結果を確認するプログラムです。

COPY文で指定する外部ファイルは以下のように記述します。
外部ファイル名:IN-MASTER-FILE
ファイルの内容:
01 ()-RECORD.
  03 ()-DATA-1  PIC X(30).
  03 ()-DATA-2  PIC X(30).
  03 ()-DATA-3  PIC X(30).
  03 NUM-1  PIC 9(03).
  03 NUM-2 PIC 9(03).

外部ファイル置き換え前:

  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. COPY_SAMPLE02.
  3. ENVIRONMENT DIVISION.
  4. INPUT-OUTPUT SECTION.
  5. DATA DIVISION.
  6. WORKING-STORAGE SECTION.
  7. *>------------------------------
  8. *> コピーするファイルを指定する
  9. *>------------------------------
  10. COPY IN-MASTER-FILE REPLACING ==()== BY ==ITEM==.
  11. PROCEDURE DIVISION.
  12. *>------------------------------
  13. *> 値を指定
  14. *>------------------------------
  15. MOVE "COPY TEST 2" TO ITEM-DATA-3.
  16. DISPLAY "ITEM-DATA-3 : "ITEM-DATA-3.
  17. STOP RUN.

このプログラムではCOPY文のREPLACINGを使用して、外部ファイルの()をITEMに置き換えています。
プログラムコンパイルすると、実行ファイルに外部ファイルの内容が一部置き換えられて挿入されます。

外部ファイル置き換え後:

  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. COPY_SAMPLE02.
  3. ENVIRONMENT DIVISION.
  4. INPUT-OUTPUT SECTION.
  5. DATA DIVISION.
  6. WORKING-STORAGE SECTION.
  7. *>------------------------------
  8. *> コピーするファイルを指定する
  9. *>------------------------------
  10. *>COPY IN-MASTER-FILE REPLACING ==()== BY ==ITEM==.
  11. 01 ITEM-RECORD.
  12. 03 ITEM-DATA-1 PIC X(30).
  13. 03 ITEM-DATA-2 PIC X(30).
  14. 03 ITEM-DATA-3 PIC X(30).
  15. 03 NUM-1 PIC 9(03).
  16. 03 NUM-2 PIC 9(03).
  17.  
  18. PROCEDURE DIVISION.
  19. *>------------------------------
  20. *> 値を指定
  21. *>------------------------------
  22. MOVE "COPY TEST 2" TO ITEM-DATA-3.
  23. DISPLAY "ITEM-DATA-3 : "ITEM-DATA-3.
  24. STOP RUN.

作成された実行ファイルを実行すると、REPLACINGで置換されたデータ項目ITEM-DATA-3のデータ項目が使用できることがわかります。

実行結果:
応用-COPY-実行例2

COPY文の練習問題

ここでは練習問題にチャレンジしてみましょう。

問題)
COBOL言語のCOPY文において、外部ファイルの文字列を一部置換するために指定するオプションは何か?

回答)
REPLACING

複数のソースファイルに同じファイルのレイアウト項目を定義していると、変更するときにソースの修正が面倒です。そのような場合は外部ファイルでレイアウトの項目を定義して、COPY文でファイルを読み込むようにしておけば後々項目に変更があった場合にファイルの修正のみで済みますので便利です。

COPY文は非常に便利な機能ですのでぜひ活用してみてください。

この記事を読んだ人は、こちらの記事も読んでいます

【未経験者歓迎】COBOLプログラマー・システムエンジニアの募集

株式会社COBOLの求人・転職・募集情報を見る

COBOL入門のカテゴリー

取引企業様 募集中
COBOL技術者 募集
COBOL魂
読者採用
COBOL入門