pagetop

COBOL言語の「COPY文とREPLACE文」の違いを理解しよう!|用語辞典

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

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

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

COPY文(コピー)を使用すると、コンパイル時にプログラムの指定した箇所に、別のファイルで記述したプログラムの内容を挿入できます。

COPY文は複数のプログラムで同じ定義内容を使用するときに、1つのファイルにプログラムを記述して共有することが可能です。そのため、複数のプログラムで共通のデータ項目を使用するデータ部(DATA DIVISION)の定義内容を共有するために使用することが多いと言えます。

共有処理の内容を変更する場合は、共通処理を記述したプログラムのファイルを修正して再コンパイルするだけで済みます。

書き方1:

COPY ファイル名

書き方2:

COPY ファイル名 REPLACING ==置き換え前== BY ==置き換え後==

外部ファイルをそのままソースコードにコピーする場合はファイル名を指定するだけですが、共通ファイルのプログラムを置き換えたい場合はREPLACING句を使用します。

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

REPLACE文(置き換え)はプログラムの原文を置き換えたい場合に使用します。COPY文同様コンパイル時に置換処理を行います。

書き方:

REPLACE ==置換前文字列== BY ==置換後文字列==

REPLACE OFF

REPLACE文は連続で記述してしまうと、最後に記述したREPLACE文以外は無効となります。

REPLACE OFFを記述するとREPLACEによる置換処理が強制終了します。

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

COPY文は先述したとおりデータ部などの共通処理をプログラムに挿入するときに便利ですが、手続き部で共通処理に記述したデータ項目を使用していた場合は、データ項目も全て変更する必要があります。そのため、変更時に漏れがでる可能性もあります。

このような問題を防ぐ場合はREPLACE文を使用すると便利です。

COPY文とREPLACE文は混同しやすいですが、

  • COPY文はファイルに記述したレイアウトのコピーを行う
  • REPLACE文はプログラムの内容を置き換える

と覚えておきましょう。

ファイルに記述した共通処理の内容を置き換えたい場合は、COPY文のREPLACING句を使用する必要があります。

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

ここでは、COPY文とREPLACE文を使用してファイルのレイアウトのコピー及びレイアウトの項目を変更した場合のプログラムの項目の置き換えを行う簡単なサンプルを紹介します。

レイアウトの定義は以下のように定義します。

IN-LAYOUT-FILE--------

01 ITEM-RECORD.

 03 ITEM-DATA-1   PIC X(10).

 03 ITEM-DATA-2   PIC X(10).

 03 ITEM-DATA-3   PIC X(10).

---------------------------

COPY文を使用したファイルレイアウトのコピー:

   
  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. *>------------------------------
  11. COPY IN-LAYOUT-FILE.
  12.  
  13. PROCEDURE DIVISION.
  14.  
  15. *>------------------------------
  16. *> コピーしたファイルの項目を指定
  17. *>------------------------------
  18. MOVE "APPLE" TO ITEM-DATA-1.
  19. DISPLAY ITEM-DATA-1.
  20.  
  21. MOVE "ORANGE" TO ITEM-DATA-2.
  22. DISPLAY ITEM-DATA-2.
  23.  
  24. MOVE "MELON" TO ITEM-DATA-3.
  25. DISPLAY ITEM-DATA-3.
  26.  
  27. STOP RUN.

実行結果:

辞典・辞書-COPY & REPLACE-実行結果

COPY文を使用すれば、別のファイルに定義したレイアウトを読み込んで、手続き部の項目が使用できることがわかります。

しかし、レイアウトに記述したデータ項目を変更してしまうと、プログラムに記述したデータ項目と不整合が発生してしまい、コンパイルの時にundefinedのコンパイルエラーが発生してしまいます。

紹介したプログラムのような簡単な処理では1つずつ項目を置き換えれば済みますが、実際のプログラムでは膨大なデータ項目を手作業で置き換えることもありますので、変更漏れが発生することもあります。

このような問題を防ぐために上述したようにREPLACE文を使用します。

以下にREPLACE文を使用した項目を置き換える簡単なプログラムを紹介します。レイアウトの定義は以下のように変更します。

IN-LAYOUT-FILE--------

01 FRUITS-RECORD.

 03 FRUITS-DATA-1   PIC X(10).

 03 FRUITS-DATA-2   PIC X(10).

 03 FRUITS-DATA-3   PIC X(10).

---------------------------

REPLACE文を使用した項目の置き換え:

   
  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. REPLACE_SAMPLE01.
  3. ENVIRONMENT DIVISION.
  4. INPUT-OUTPUT SECTION.
  5. DATA DIVISION.
  6. WORKING-STORAGE SECTION.
  7.  
  8. *>------------------------------
  9. *> コピーするファイルを指定する
  10. *>------------------------------
  11. COPY IN-LAYOUT-FILE.
  12.  
  13. PROCEDURE DIVISION.
  14.  
  15. *>------------------------------
  16. *> コピーしたファイルの項目を指定
  17. *>------------------------------
  18. REPLACE ==ITEM-DATA-1== BY ==FRUITS-DATA-1==.
  19. MOVE "APPLE" TO ITEM-DATA-1.
  20. DISPLAY ITEM-DATA-1.
  21.  
  22. REPLACE ==ITEM-DATA-2== BY ==FRUITS-DATA-2==.
  23. MOVE "ORANGE" TO ITEM-DATA-2.
  24. DISPLAY ITEM-DATA-2.
  25.  
  26. REPLACE ==ITEM-DATA-3== BY ==FRUITS-DATA-3==.
  27. MOVE "MELON" TO ITEM-DATA-3.
  28. DISPLAY ITEM-DATA-3.
  29.  
  30. REPLACE OFF.
  31. STOP RUN.

実行結果:

辞典・辞書-COPY & REPLACE-実行結果

REPLACE文を使用すれば簡単に項目の置き換えができることがわかります。1つのREPLACE文の有効範囲は、次のREPLACE文が出現するまでの範囲となります。

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

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

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

COBOL入門のカテゴリー

|  基礎  |  応用  |  勉強  |  辞書  |

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

Valid XHTML 1.0 Transitional

正当なCSSです!

Level Triple-A conformance W3C WAI Web Content Accessibility Guidelines 2.0

このホームページで使用されているCSS(スタイルシート)・XHTMLは、W3Cにより、正しい文法で書かれていることが検証されています。

プライバシーマーク

SSL GlobalSign Site Seal