徹底解説!一歩先を行く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).
外部ファイル置き換え前:
- IDENTIFICATION DIVISION.
- PROGRAM-ID. COPY_SAMPLE01.
- ENVIRONMENT DIVISION.
- INPUT-OUTPUT SECTION.
- DATA DIVISION.
- WORKING-STORAGE SECTION.
- *>------------------------------
- *> コピーするファイルを指定する
- *>------------------------------
- COPY IN-MASTER-FILE.
- PROCEDURE DIVISION.
- *>------------------------------
- *> 値を指定
- *>------------------------------
- MOVE "COPY TEST" TO ITEM-DATA-1.
- MOVE 100 TO NUM-1.
- DISPLAY "ITEM-DATA-1 : "ITEM-DATA-1.
- DISPLAY "NUM-1 : "NUM-1.
- STOP RUN.
このプログラムをコンパイルすると、実行ファイルに外部ファイルの内容が挿入されます。
以下のように「COPY IN-MASTER-FILE.」以下に外部ファイルの内容が挿入されます。
外部ファイル置き換え後:
- IDENTIFICATION DIVISION.
- PROGRAM-ID. COPY_SAMPLE01.
- ENVIRONMENT DIVISION.
- INPUT-OUTPUT SECTION.
- DATA DIVISION.
- WORKING-STORAGE SECTION.
- *>------------------------------
- *> コピーするファイルを指定する
- *>------------------------------
- *>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).
- PROCEDURE DIVISION.
- *>------------------------------
- *> 値を指定
- *>------------------------------
- MOVE "COPY TEST" TO ITEM-DATA-1.
- MOVE 100 TO NUM-1.
- DISPLAY "ITEM-DATA-1 : " ITEM-DATA-1.
- DISPLAY "NUM-1 : " NUM-1.
- STOP RUN.
※COPY文は元のソースファイルの内容を書き換えるのではなく、コンパイルして作成された実行ファイルの内容を置き換えます。
作成された実行ファイルを実行すると、外部ファイルで定義されているITEM-DATA-1やNUM-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).
外部ファイル置き換え前:
- IDENTIFICATION DIVISION.
- PROGRAM-ID. COPY_SAMPLE02.
- ENVIRONMENT DIVISION.
- INPUT-OUTPUT SECTION.
- DATA DIVISION.
- WORKING-STORAGE SECTION.
- *>------------------------------
- *> コピーするファイルを指定する
- *>------------------------------
- COPY IN-MASTER-FILE REPLACING ==()== BY ==ITEM==.
- PROCEDURE DIVISION.
- *>------------------------------
- *> 値を指定
- *>------------------------------
- MOVE "COPY TEST 2" TO ITEM-DATA-3.
- DISPLAY "ITEM-DATA-3 : "ITEM-DATA-3.
- STOP RUN.
このプログラムではCOPY文のREPLACINGを使用して、外部ファイルの()をITEMに置き換えています。
プログラムコンパイルすると、実行ファイルに外部ファイルの内容が一部置き換えられて挿入されます。
外部ファイル置き換え後:
- IDENTIFICATION DIVISION.
- PROGRAM-ID. COPY_SAMPLE02.
- ENVIRONMENT DIVISION.
- INPUT-OUTPUT SECTION.
- DATA DIVISION.
- WORKING-STORAGE SECTION.
- *>------------------------------
- *> コピーするファイルを指定する
- *>------------------------------
- *>COPY IN-MASTER-FILE REPLACING ==()== BY ==ITEM==.
- 01 ITEM-RECORD.
- 03 ITEM-DATA-1 PIC X(30).
- 03 ITEM-DATA-2 PIC X(30).
- 03 ITEM-DATA-3 PIC X(30).
- 03 NUM-1 PIC 9(03).
- 03 NUM-2 PIC 9(03).
- PROCEDURE DIVISION.
- *>------------------------------
- *> 値を指定
- *>------------------------------
- MOVE "COPY TEST 2" TO ITEM-DATA-3.
- DISPLAY "ITEM-DATA-3 : "ITEM-DATA-3.
- STOP RUN.
作成された実行ファイルを実行すると、REPLACINGで置換されたデータ項目ITEM-DATA-3のデータ項目が使用できることがわかります。
実行結果:
COPY文の練習問題
ここでは練習問題にチャレンジしてみましょう。
問題)
COBOL言語のCOPY文において、外部ファイルの文字列を一部置換するために指定するオプションは何か?
回答)
REPLACING
複数のソースファイルに同じファイルのレイアウト項目を定義していると、変更するときにソースの修正が面倒です。そのような場合は外部ファイルでレイアウトの項目を定義して、COPY文でファイルを読み込むようにしておけば後々項目に変更があった場合にファイルの修正のみで済みますので便利です。
COPY文は非常に便利な機能ですのでぜひ活用してみてください。
この記事を読んだ人は、こちらの記事も読んでいます
あなたのCOBOL技術を活かしませんか?
COBOL入門のカテゴリー
1. 優良社員が多数在籍しています
2. 即日派遣、又は請負います
3. 安心価格で請負います
4. 同時、協力会社募集中です
1. 正社員
2. 契約社員
3. 個人事業主
などの 求人情報 が閲覧できます。
目指せ!COBOLダントツ一番企業。
創業当初の話や理念が閲覧できます。
応募条件
※2020年5月31日を以って、締切りました。
18歳~28歳の方。
正社員採用において、北川社長の著書『祈り方が9割』を読んで感想文を事前に提出すると、無条件で最終面接まで進むことができます。
COBOLとは、どのようなプログラミング言語なのか、初心者にもわかりやすく、文法の例をあげて解説してます。
COBOL入門の人気記事
- COBOL言語とは?プログラムの書き方やルールを解説!|基礎ガイド
- 【COBOL言語】条件分岐処理の代名詞「IF文」について知ろう|用語辞典
- COBOL言語の「MOVE文」とは?転記のルールをご紹介します|用語辞典
- COBOL言語の「STRING文」とは?文字連結の基礎知識と注意点|用語辞典
- 多枝分岐ってなに?COBOL言語の「EVALUATE文」を知ろう!|用語辞典
- COBOL言語の「PICTURE句」とは?基本事項を解説します!|用語辞典
- COBOL言語で計算処理をするなら「COMPUTE文」|用語辞典
- COBOL言語の「REDEFINES句」とは?使い方を確認しよう!|用語辞典
- 覚えておけば楽ができる?COBOL言語の「COPY文」の使い方|用語辞典
- COBOL言語の文字列操作のパターンを理解しよう!|基礎ガイド
- COBOL言語の初期化処理に重宝する「INITIALIZE文」とは?|用語辞典
- COBOL言語の「LOW-VALUE」の使い方について理解しよう!|基礎ガイド
- COBOL言語の「OCCURS句」について知ろう!学ぶべき基本とは|用語辞典
- COBOL言語初心者も安心! 難解「CALL文」をスッキリ解決|用語辞典
- COBOL言語の「PERFORM文」とは。実行制御について解説!|用語辞典
- COBOL言語の繰り返し処理のパターンを理解しよう!|基礎ガイド
- COBOL言語の「定数」の種類と使い方について理解しよう!|用語辞典
- COBOLのDBアクセスパターンを学ぼう!「FETCH」|応用ガイド
- COBOL言語の「DISPLAY文」は、ディスプレイ出力の為にある|用語辞典
- COBOL言語の「VARYING句」は便利?使用方法を学びましょう|用語辞典