EXTERNAL ファイルの共用

ファイルに EXTERNAL 文節を使用することによって、実行単位内で個別にコンパイルされたプログラムは、 共通のファイルにアクセスすることができます。 これらの EXTERNAL ファイルは、弱エクスポートとして処理されます。 強エクスポートと弱エクスポートについては、「ILE 概念」を参照してください。

EXTERNAL ファイルが複数の ILE COBOL プログラムで定義されている場合、ILE COBOL プログラムのどれか 1 つによってオープンされると、 すべてのプログラムからアクセス可能になります。 同様に、いずれかのプログラムが EXTERNAL ファイルをクローズすると、どのプログラムからもアクセスできないようになります。

複数のモジュール・オブジェクトの複数の ILE COBOL プログラムの場合、EXTERNAL ファイルを宣言している ILE COBOL プログラムが最初に呼び出された時点で実行時整合性検査が行われ、 そのモジュール・オブジェクトの定義と、その他のモジュール・オブジェクトにおいてすでに呼び出されている ILE COBOL プログラムの定義とで整合性があるかどうかが検査されます。 矛盾が検出された場合は、実行時例外メッセージが出されます。

図 59 の例は、EXTERNAL ファイルを使用した場合の利点について示すものです。

次の表に、図 59 の例におけるプログラム (またはサブプログラム) の名前と、その機能を示します。

表 12. EXTERNAL ファイルを使用した入出力例のプログラム名
NAME 機能
EF1MAIN これはメイン・プログラムです。 すべてのサブプログラムを呼び出した後、レコード域の内容を検査します。
EF1OPENO このプログラムは出力用に外部ファイルをオープンし、ファイル状況コードを検査します。
EF1WRITE このプログラムはレコードを外部ファイルに書き込み、ファイル状況コードを検査します。
EF1OPENI このプログラムは入力用に外部ファイルをオープンし、ファイル状況コードを検査します。
EF1READ このプログラムは外部ファイルからレコードを読み取り、ファイル状況コードを検査します。
EF1CLOSE このプログラムは外部ファイルをクローズし、ファイル状況コードを検査します。

このサンプル・プログラムは、WORKING-STORAGE SECTION のデータ項目に対しても EXTERNAL 文節を使用します。 この項目は、ファイル状況コードを検査するために使用されます。

図 59. EXTERNAL ファイルを使用した入出力
 5722WDS V5R4M0  060210 LN  IBM ILE COBOL                 CBLGUIDE/EXTLFL         ISERIES1    06/02/15 13:11:39        ページ    2
                                     ソ ー ス
  STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S コピー名   変更日付
     1     000100 IDENTIFICATION DIVISION.
     2     000200 PROGRAM-ID.  EF1MAIN.
           000300*
           000400* これは外部ファイル処理を制御する
           000500* メイン・プログラムです。
           000600*
           000700
     3     000800 ENVIRONMENT DIVISION.
     4     000900 INPUT-OUTPUT SECTION.
     5     001000 FILE-CONTROL.
     6     001100      SELECT EF1
     7     001200         ASSIGN TO DISK-EFILE1
     8     001300         FILE STATUS IS EFS1
     9     001400         ORGANIZATION IS SEQUENTIAL.
           001500
    10     001600 DATA DIVISION.
    11     001700 FILE SECTION.
    12     001800 FD  EF1 IS EXTERNAL
           001900            RECORD CONTAINS 80 CHARACTERS.
    13     002000 01  EF-RECORD-1.
    14     002100     05  EF-ITEM-1     PIC X(80).
           002200
    15     002300 WORKING-STORAGE SECTION.
    16     002400 01  EFS1              PIC 99 EXTERNAL.
           002500
    17     002600 PROCEDURE DIVISION.
           002700 EF1MAIN-PROGRAM SECTION.
           002800 MAINLINE.
    18     002900      CALL "EF1OPENO"
    19     003000      CALL "EF1WRITE"
    20     003100      CALL "EF1CLOSE"
    21     003200      CALL "EF1OPENI"
    22     003300      CALL "EF1READ"
    23     003400      IF EF-RECORD-1 = "First Record" THEN
    24     003500         DISPLAY "First record correct"
           003600      ELSE
    25     003700         DISPLAY "First record incorrect"
    26     003800         DISPLAY "Expected:  First Record"
    27     003900         DISPLAY "Found:    " EF-RECORD-1
           004000      END-IF
    28     004100      CALL "EF1CLOSE"
    29     004200      GOBACK.
    30     004300 END PROGRAM EF1MAIN.
           004400
           004600
                           * * * * *   ソ ー ス 仕 様 の 終 わ り   * * * * *
 5722WDS V5R4M0  060210 LN  IBM ILE COBOL                 CBLGUIDE/EXTLFL          ISERIES1   06/02/15 13:11:39        ページ    5
                                     ソ ー ス
  STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S コピー名   変更日付
     1     004700 IDENTIFICATION DIVISION.
     2     004800 PROGRAM-ID.  EF1OPENO.
           004900*
           005000* このプログラムは出力用に外部ファイルをオープンします。
           005100*
           005200
     3     005300 ENVIRONMENT DIVISION.
     4     005400 INPUT-OUTPUT SECTION.
     5     005500 FILE-CONTROL.
     6     005600      SELECT EF1
     7     005700         ASSIGN TO DISK-EFILE1
     8     005800         FILE STATUS IS EFS1
     9     005900         ORGANIZATION IS SEQUENTIAL.
           006000
    10     006100 DATA DIVISION.
    11     006200 FILE SECTION.
    12     006300 FD  EF1 IS EXTERNAL
           006400            RECORD CONTAINS 80 CHARACTERS.
    13     006500 01  EF-RECORD-1.
    14     006600     05  EF-ITEM-1     PIC X(80).
           006700
    15     006800 WORKING-STORAGE SECTION.
    16     006900 01  EFS1              PIC 99 EXTERNAL.
           007000
    17     007100 PROCEDURE DIVISION.
           007200 EF1OPENO-PROGRAM SECTION.
           007300 MAINLINE.
    18     007400      OPEN OUTPUT EF1
    19     007500      IF EFS1 NOT = 0 THEN
    20     007600         DISPLAY "File Status " EFS1 " on OPEN OUTPUT"
    21     007700         STOP RUN
           007800      END-IF
    22     007900      GOBACK.
    23     008000 END PROGRAM EF1OPENO.
           008100
           008300
                           * * * * *   ソ ー ス 仕 様 の 終 わ り   * * * * *
 5722WDS V5R4M0  060210 LN  IBM ILE COBOL                 CBLGUIDE/EXTLFL          ISERIES1   06/02/15 13:11:39        ページ    8
                                     ソ ー ス
  STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S コピー名   変更日付
     1     008400 IDENTIFICATION DIVISION.
     2     008500 PROGRAM-ID.  EF1WRITE.
           008600*
           008700* このプログラムはレコードを外部ファイルに書き込みます。
           008800*
           008900
     3     009000 ENVIRONMENT DIVISION.
     4     009100 INPUT-OUTPUT SECTION.
     5     009200 FILE-CONTROL.
     6     009300      SELECT EF1
     7     009400         ASSIGN TO DISK-EFILE1
     8     009500         FILE STATUS IS EFS1
     9     009600         ORGANIZATION IS SEQUENTIAL.
           009700
    10     009800 DATA DIVISION.
    11     009900 FILE SECTION.
    12     010000 FD  EF1 IS EXTERNAL
           010100            RECORD CONTAINS 80 CHARACTERS.
    13     010200 01  EF-RECORD-1.
    14     010300     05  EF-ITEM-1     PIC X(80).
           010400
    15     010500 WORKING-STORAGE SECTION.
    16     010600 01  EFS1              PIC 99 EXTERNAL.
           010700
    17     010800 PROCEDURE DIVISION.
           010900 EF1WRITE-PROGRAM SECTION.
           011000 MAINLINE.
    18     011100      MOVE "First record" TO EF-RECORD-1
    19     011200      WRITE EF-RECORD-1
    20     011300      IF EFS1 NOT = 0 THEN
    21     011400         DISPLAY "File Status " EFS1 " on WRITE"
    22     011500         STOP RUN
           011600      END-IF
    23     011700      GOBACK.
    24     011800 END PROGRAM EF1WRITE.
           011900
           012100
                           * * * * *   ソ ー ス 仕 様 の 終 わ り   * * * * *
 5722WDS V5R4M0  060210 LN  IBM ILE COBOL                 CBLGUIDE/EXTLFL          ISERIES1   06/02/15 13:11:39        ページ   11
                                     ソ ー ス
  STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S コピー名   変更日付
     1     012200 IDENTIFICATION DIVISION.
     2     012300 PROGRAM-ID.  EF1OPENI.
           012400*
           012500* このプログラムは入力用に外部ファイルをオープンします。
           012600*
           012700
     3     012800 ENVIRONMENT DIVISION.
     4     012900 INPUT-OUTPUT SECTION.
     5     013000 FILE-CONTROL.
     6     013100      SELECT EF1
     7     013200         ASSIGN TO DISK-EFILE1
     8     013300         FILE STATUS IS EFS1
     9     013400         ORGANIZATION IS SEQUENTIAL.
           013500
    10     013600 DATA DIVISION.
    11     013700 FILE SECTION.
    12     013800 FD  EF1 IS EXTERNAL
           013900            RECORD CONTAINS 80 CHARACTERS.
    13     014000 01  EF-RECORD-1.
    14     014100     05  EF-ITEM-1     PIC X(80).
           014200
    15     014300 WORKING-STORAGE SECTION.
    16     014400 01  EFS1              PIC 99 EXTERNAL.
           014500
    17     014600 PROCEDURE DIVISION.
           014700 EF1OPENI-PROGRAM SECTION.
           014800 MAINLINE.
    18     014900      OPEN INPUT EF1
    19     015000      IF EFS1 NOT = 0 THEN
    20     015100         DISPLAY "File Status " EFS1 " on OPEN INPUT"
    21     015200         STOP RUN
           015300      END-IF
    22     015400      GOBACK.
    23     015500 END PROGRAM EF1OPENI.
           015600
           015800
                           * * * * *   ソ ー ス 仕 様 の 終 わ り   * * * * *
 5722WDS V5R4M0  060210 LN  IBM ILE COBOL                 CBLGUIDE/EXTLFL          ISERIES1   06/02/15 13:11:39        ページ   14
                                     ソ ー ス
  STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S コピー名   変更日付
     1     015900 IDENTIFICATION DIVISION.
     2     016000 PROGRAM-ID.  EF1READ.
           016100*
           016200* このプログラムは外部ファイルからレコードを読み取ります。
           016300*
           016400
     3     016500 ENVIRONMENT DIVISION.
     4     016600 INPUT-OUTPUT SECTION.
     5     016700 FILE-CONTROL.
     6     016800      SELECT EF1
     7     016900         ASSIGN TO DISK-EFILE1
     8     017000         FILE STATUS IS EFS1
     9     017100         ORGANIZATION IS SEQUENTIAL.
           017200
    10     017300 DATA DIVISION.
    11     017400 FILE SECTION.
    12     017500 FD  EF1 IS EXTERNAL
           017600            RECORD CONTAINS 80 CHARACTERS.
    13     017700 01  EF-RECORD-1.
    14     017800     05  EF-ITEM-1     PIC X(80).
           017900
    15     018000 WORKING-STORAGE SECTION.
    16     018100 01  EFS1              PIC 99 EXTERNAL.
           018200
    17     018300 PROCEDURE DIVISION.
           018400 EF1READ-PROGRAM SECTION.
           018500 MAINLINE.
    18     018600      READ EF1
    19     018700      IF EFS1 NOT = 0 THEN
    20     018800         DISPLAY "File Status " EFS1 " on READ"
    21     018900         STOP RUN
           019000      END-IF
    22     019100      GOBACK.
    23     019200 END PROGRAM EF1READ.
           019300
           019500
                           * * * * *   ソ ー ス 仕 様 の 終 わ り   * * * * *
 5722WDS V5R4M0  060210 LN  IBM ILE COBOL                 CBLGUIDE/EXTLFL          ISERIES1   06/02/15 13:11:39        ページ   17
                                     ソ ー ス
  STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S コピー名   変更日付
     1     019600 IDENTIFICATION DIVISION.
     2     019700 PROGRAM-ID.  EF1CLOSE.
           019800*
           019900* このプログラムは外部ファイルからレコードを読み取ります。
           020000*
           020100
     3     020200 ENVIRONMENT DIVISION.
     4     020300 INPUT-OUTPUT SECTION.
     5     020400 FILE-CONTROL.
     6     020500      SELECT EF1
     7     020600         ASSIGN TO DISK-EFILE1
     8     020700         FILE STATUS IS EFS1
     9     020800         ORGANIZATION IS SEQUENTIAL.
           020900
    10     021000 DATA DIVISION.
    11     021100 FILE SECTION.
    12     021200 FD  EF1 IS EXTERNAL
           021300            RECORD CONTAINS 80 CHARACTERS.
    13     021400 01  EF-RECORD-1.
    14     021500     05  EF-ITEM-1     PIC X(80).
           021600
    15     021700 WORKING-STORAGE SECTION.
    16     021800 01  EFS1              PIC 99 EXTERNAL.
           021900
    17     022000 PROCEDURE DIVISION.
           022100 EF1CLOSE-PROGRAM SECTION.
           022200 MAINLINE.
    18     022300      CLOSE EF1
    19     022400      IF EFS1 NOT = 0 THEN
    20     022500         DISPLAY "File Status " EFS1 " on CLOSE"
    21     022600         STOP RUN
           022700      END-IF
    22     022800      GOBACK.
    23     022900 END PROGRAM EF1CLOSE.
           023000
           023100
                           * * * * *   ソ ー ス 仕 様 の 終 わ り   * * * * *