COBOL言語の「EXTERNAL句」とファイルの外部属性について | 用語辞典

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

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

COBOL(コボル)言語のEXTERNAL句とは?

EXTERNAL句は、データ名やファイル名に外部属性を指定して、プログラム間で共用するときに使用します。ファイル記述項(FD)又は作業場所節のレコード記述項に記述することで、ファイルやデータを共用できます。また、ファイルやデータを共用するプログラムでは、ファイルとレコードの定義は完全に同一に記述する必要があります。

書き方1:ファイルに外部属性を指定する

FD [ファイル項目] IS EXTERNAL.

プログラム1:

辞典・辞書-EXTERNAL-プログラム1

プログラム2:

辞典・辞書-EXTERNAL-プログラム2

書き方2:データ項目に外部属性を指定する

01 [データ項目] PIC 99 EXTERNAL.

EXTERNAL句のCOBOL(コボル)言語における基本事項やルールについて

  1. ファイル項目 IS EXTERNAL.などの各要素間における空白や改行有無は自由に設定できます。
  2. ファイルをEXTERNAL句で指定する場合は、ファイル記述項(FD)に指定します。
  3. データをEXTERNAL句で指定する場合は、作業場所節のレコード記述項に指定します。
  4. EXTERNAL句を指定したデータ項目は、レベル番号が01のデータ記述項のみ記述ができます。
  5. EXTERNAL句を指定したファイル数は、最大で255ファイルまでの範囲となります。
  6. EXTERNAL句を指定したデータ領域は、最大で32,767までのデータ領域の範囲となります。
  7. EXTERNAL句を指定した複数のプログラムは、別々のコンパイル単位であっても構いません。

COBOL(コボル)言語のEXTERNAL句を扱う上での注意点

  1. EXTERNAL句を指定したレベル番号01のデータ項目は、別のEXTERNAL句で指定したレベル番号01のデータ項目名と重複してはいけません。
  2. EXTERNAL句を指定したファイルとレコードの定義は、複数のプログラム間で完全に同一に記述する必要があります。差異があった場合はエラーになります。
  3. EXTERNAL句を指定したデータ記述項、またはデータ記述項に従属するデータ記述項にVALUE句を指定することはできません。
  4. ファイル数(255)またはデータ領域(32,767)が上限を超えた場合はエラーとなります。

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

以下にEXTERNAL句を使用して、複数のプログラムでファイルを共用する簡単なサンプルプログラムを紹介します。

使用例:SAMPLEPG.cob

   
  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. SAMPLEPG.
  3.  
  4. ENVIRONMENT DIVISION.
  5. INPUT-OUTPUT SECTION.
  6. FILE-CONTROL.
  7. SELECT TEST-FILE ASSIGN TO 'test.txt'
  8. ORGANIZATION IS LINE SEQUENTIAL.
  9.  
  10. DATA DIVISION.
  11. FILE SECTION.
  12. *>外部ファイルとして指定する
  13. FD TEST-FILE IS EXTERNAL.
  14. 01 TEST-RECORD-1.
  15. 03 TEST-ITEM-1 PIC X(50).
  16.  
  17. WORKING-STORAGE SECTION.
  18.  
  19. PROCEDURE DIVISION.
  20. MAIN SECTION.
  21.  
  22. OPEN OUTPUT TEST-FILE.
  23.  
  24. CALL "SUBPG01".
  25. CALL "SUBPG02".
  26.  
  27. CLOSE TEST-FILE.
  28.  
  29. STOP RUN.

使用例:SUBPG01.cob

   
  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. SUBPG01.
  3.  
  4. ENVIRONMENT DIVISION.
  5. INPUT-OUTPUT SECTION.
  6. FILE-CONTROL.
  7. SELECT TEST-FILE ASSIGN TO 'test.txt'
  8. ORGANIZATION IS LINE SEQUENTIAL.
  9.  
  10. DATA DIVISION.
  11. FILE SECTION.
  12. *>外部ファイルとして指定する
  13. FD TEST-FILE IS EXTERNAL.
  14. 01 TEST-RECORD-1.
  15. 03 TEST-ITEM-1 PIC X(50).
  16.  
  17. WORKING-STORAGE SECTION.
  18.  
  19. PROCEDURE DIVISION.
  20.  
  21. MOVE "SUBPG01 This is an EXTERNAL write test." TO TEST-RECORD-1.
  22. WRITE TEST-RECORD-1.
  23.  
  24. DISPLAY "SUBPG01:FILE WRITE"
  25.  
  26. GOBACK.
  27.  
  28. EXIT PROGRAM.

使用例:SUBPG02.cob

   
  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. SUBPG02.
  3.  
  4. ENVIRONMENT DIVISION.
  5. INPUT-OUTPUT SECTION.
  6. FILE-CONTROL.
  7. SELECT TEST-FILE ASSIGN TO 'test.txt'
  8. ORGANIZATION IS LINE SEQUENTIAL.
  9.  
  10. DATA DIVISION.
  11. FILE SECTION.
  12. *>外部ファイルとして指定する
  13. FD TEST-FILE IS EXTERNAL.
  14. 01 TEST-RECORD-1.
  15. 03 TEST-ITEM-1 PIC X(50).
  16.  
  17. WORKING-STORAGE SECTION.
  18.  
  19. PROCEDURE DIVISION.
  20.  
  21. MOVE "SUBPG02 This is an EXTERNAL write test." TO TEST-RECORD-1.
  22. WRITE TEST-RECORD-1.
  23.  
  24. DISPLAY "SUBPG02:FILE WRITE"
  25.  
  26. GOBACK.
  27.  
  28. EXIT PROGRAM.

複数の関連するソースファイルをまとめてコンパイルする場合は、関連したファイルを一緒にコンパイルする必要があります。

$ cobc -x --free SAMPLEPG.cob SUBPG01.cob SUBPG02.cob

実行結果:(コンソール出力)

SUBPG01:FILE WRITE

SUBPG02:FILE WRITE

実行結果:(test.txt)

辞典・辞書-EXTERNAL-実行結果

紹介したサンプルプログラムでは、ファイル記述項(FD)でファイルにEXTERNAL句を指定しています。

最初に実行するプログラムであるSAMPLEPGでは、EXTERNAL句を指定したファイルを書き込み可能なOUTPUTでオープンしています。

その後、CALL文で呼び出されるプログラムSUBPG01、SUBPG02では、EXTERNAL句を指定した共用ファイルに対して、書き込みを実施しています。

これはEXTERNAL句を指定したファイルを、既にSAMPLEPGでオープンしているため、個別にOPENを指定しなくても書き込みを行うことが可能です。

実行結果のとおり、SUBPG01、SUBPG02のプログラムからEXTERNAL句を使用した共用ファイルに対して、正常に書き込みが行われていることがわかります。

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

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

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

COBOL入門のカテゴリー

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