覚えておけば楽ができる?COBOL言語の「COPY文」の使い方| 用語辞典

COBOL(コボル)言語の予約語COPYを使った命令文の書き方とは

辞典・辞書-COPY-イメージ

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

COBOL(コボル)言語のCOPY文は、文字通り複写(コピー)するための命令文です。

これはメインプログラムのソース上にあるデータ項目の定義などを別のプログラムと統一したい場合や、よく利用するプログラムソースを使いまわしたい場合などによく用いられます。

そこで今回は、COPY文の使い方やルール、注意点などをご紹介します。

COBOL(コボル)言語のCOPY文-書き方と使用例

書き方1: (通常の複写)

COPY [原文ファイル名(COPY対象ファイル)] OF [登録集ディレクトリ名].

COPY文は、「COPY」の後に続く[原文ファイル]から内容を複写(コピー)します。
[原文ファイル名]とは、原文(ソースの一部)が書かれているファイル名のことです。
[登録集ディレクトリ名]とは、原文ファイルが収納されているディレクトリの名前のことです。
「OF [登録集ディレクトリ名]」は、不要であれば省略できます。

COPY文で使用する原文(ソースの一部)は、COBOL登録集に登録されているものを使用し、事前に所定の形式でファイルを作成する必要があります。
また、原文ファイルにはCOPY文で使用するためのソースをあらかじめ記述しておかなければなりません。
そして、COPY文で原文ファイルを指定することで、原文ファイル内のソースをコピーすることができます。

それでは使用例1のサンプルプログラムで、COPY文の使い方を確認してみましょう。

使用例1:コピーする側(COPY-SAMPLE01)

使用例1:コピー参照される側(COPY-DATA)

実行結果1:

このサンプルプログラムでは、「COPY-SAMPLE01」内のデータ部(DATA DIVISION)で指定したCOPY文で、原文ファイル「COPY-DATA」のソースを転写(コピー)しています。

COPY文はCALL文とは違いプログラムそのものを呼び出すわけではなく、原文ファイルの内容を転写(コピー)します。

今回の場合は、「COPY-DATA」ファイル内で定義した作業場所節(WORKING-STORAGE SECTION)のデータ項目「FILE-DATA」の内容を、「COPY-SAMPLE01」のソース内(7行目の部分)で指定した「COPY COPY-DATA(原文ファイル名)」の部分に転写(コピー)します。

このようにCOPY文は、何度も同じ内容を別のプログラムに流用する場合やデータ項目のつくりを統一する場合に便利な命令文です。

書き方2: (置き換え指定の複写)

COPY [原文ファイル名(COPY対象ファイル)] OF [登録集ディレクトリ名]
REPLACING [==変更対象テキスト==] BY [==変更テキスト==].

COPY文は、「COPY」の後に続く[原文ファイル]から内容を複写(コピー)し置き換えます。
[原文ファイル名]とは、原文(ソースの一部)が書かれているファイル名のことです。
[登録集ディレクトリ名]とは、原文ファイルが収納されているディレクトリの名前のことです。
「OF [登録集ディレクトリ名]」は、不要であれば省略できます。

使用例2:コピーする側(COPY-SAMPLE02)

使用例2:コピー参照される側(COPY-DATA)

実行結果2:

使用例1のサンプルプログラムでは、原文ファイルの内容をそのまま転写(コピー)していました。
ですが、使用例2のサンプルプログラムのように、COPY文にREPLACING指定をつけることで原文ファイルの内容を指定したテキスト(文章)と置き換えて転写(コピー)することが可能です。
このように、COPY文とREPLACING指定を活用することで、原文ファイル自体に手を加えることなく内容の変更ができますので、コピーする内容を部分的に書き換えたい場合に重宝します。

もちろん原文ファイルのソース部分に手を加えていませんので、コピー元のファイルの中身は何も変わっていません。

COPY文のCOBOL言語における基本事項やルール

  1. 「COPY [原文ファイル名] OF [登録集ディレクトリ名].」のOFはINとも記述できます。
  2. OFとINは、どちらを記述しても処理は変わりません。(同じ機能として扱われます)
  3. COPY文は、記述したCOPY文全体を原文ファイル(コピーするファイル)の内容と書き換えます。
  4. COPY文は、文字列が書ける場所や分離符が書ける場所ならどこにでも書くことができます。
  5. 原文ファイルのプログラムは、正しい文法や規則に従って書かれていなければなりません。
  6. REPLACING指定で変更対象テキストを指定する場合、少なくとも1つの語を含まなければなりません。
  7. REPLACING指定の置き換えは、原文ファイルの左から右へ語単位で照合が行われ、指定した語と一致すると変更する語で置き換えます。置き換えが完了すると、照合対象の次の語から再開します。

COBOL(コボル)言語のCOPY文を使う上での注意点

  1. 基本的にCOPY文は、COPY文の中にCOPY文を書いてはいけません。
  2. COPY文のREPLACING指定で、原文ファイルの変更対象部分を置き換える場合、その中に含まれる注記行や空白行は照合する時に無視されます。
  3. COPY文のREPLACING指定で、原文ファイルの変更対象部分を置き換える場合、その中に含まれる分離符の空白や分離符のセミコロンやコンマなどは1つの空白と識別されます。

COPY文を使ったCOBOL(コボル)プログラムの活用法

ここまでCOPY文の書き方や使用例をご紹介してきました。
データの使いまわしや一部の対象テキストの置き換えなど、うまく活用すれば作業の効率化が図れることが理解いただけたと思います。
COPY文のREPLACING指定の使い方には、「LEADING(最初)」または「TRAILING(最後)」を指定して部分一致の置き換え処理をする方法もあります。
それではこの活用法では、「LEADING(最初)」を指定したCOPY文の処理をご紹介いたします。

活用例:コピーする側(COPY-SAMPLE03)

IDENTIFICATION DIVISION.
PROGRAM-ID. COPY-SAMPLE03.

DATA DIVISION.
FILE SECTION.

* 呼び出す原文ファイルと置き換えるテキストの定義
COPY COPY-DATA2 REPLACING
LEADING ==STR== BY ==REPLACING==.


PROCEDURE DIVISION.
MIN-PROCEDURE.
* データ項目に文字列を設定
MOVE "ABCD" TO REPLACING-DATA01.
MOVE "EFGH" TO REPLACING-DATA02.
MOVE "IJKL" TO REPLACING-DATA03.

DISPLAY REPLACING-DATA01.
DISPLAY REPLACING-DATA02.
DISPLAY REPLACING-DATA03.

STOP RUN.

END PROGRAM COPY-SAMPLE03.

活用例:コピー参照される側(COPY-DATA2)

* 呼び出す原文ファイルと置き換えるテキストの定義
WORKING-STORAGE SECTION.
01 STR-DATA.
03 STR-DATA01 PIC X(4).
03 STR-DATA02 PIC X(4).
03 STR-DATA03 PIC X(4).

実行結果:

「COBOL(コボル)言語のCOPY文-書き方と使用例」でご紹介した、「書き方2: (置き換え指定の複写) 」では、1つの語全体をREPLACING指定で変更するテキスト(変更する語)に置き換えていました。
上記の発展系として、COBOL2002規格で追加された「LEADING(最初)」または「TRAILING(最後)」をREPLACING指定に設定することにより、語全体を置き換えるのではなく、一部のみを置き換えることができるようになります。

これをうまく使用することにより、さらにCOPY文の活用の幅が広がりますので是非試してみてください。

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

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

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

COBOL入門のカテゴリー

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