本文へスキップ
BecomeCoder

COBOLコース · 第7章 ファイル処理の基本 ― 順編成ファイル · レッスン40

FILE STATUS ― エラーハンドリングの基本

ローカル実施

導入

ファイルが存在しなかったり、ディスクの空き容量が足りなかったりすると、OPEN・READ・WRITEは失敗することがあります。COBOLでは、こうしたファイル操作の成否を FILE STATUS という仕組みで確認できます。

説明

       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT SALES-FILE ASSIGN TO "sales.dat"
               ORGANIZATION IS LINE SEQUENTIAL
               FILE STATUS IS WS-FILE-STATUS.

       DATA DIVISION.
       FILE SECTION.
       FD  SALES-FILE.
       01  SALES-RECORD         PIC X(20).

       WORKING-STORAGE SECTION.
       01  WS-FILE-STATUS       PIC X(2).

       PROCEDURE DIVISION.
           OPEN INPUT SALES-FILE.
           IF WS-FILE-STATUS NOT = "00"
               DISPLAY "ファイルを開けませんでした。ステータス: "
                       WS-FILE-STATUS
               STOP RUN
           END-IF.
  • FILE STATUS IS WS-FILE-STATUS. … SELECT文に追加すると、ファイル操作(OPEN/READ/WRITE/CLOSEなど)のたびに、その結果を示す2桁のコードWS-FILE-STATUS に自動的に設定されるようになります。
  • "00" … 正常終了を表す、最も基本的なステータスコード。

代表的なFILE STATUSコードは次のとおりです。

コード意味
00正常終了
10ファイルの終わりに達した(READのAT ENDと連動)
23指定したキーのレコードが見つからない(索引編成ファイルなどで)
35OPEN INPUTしようとしたファイルが存在しない
37ファイルを開くパーミッションがない、など

FILE STATUSを毎回チェックする習慣を付けておくと、「ファイルが見つからないのに気づかずそのまま処理を続けてしまう」といった事故を防げます。特に本番のバッチ処理では、エラーを検知したら安全に処理を止める(あるいはログに記録して次の対応につなげる) ことが重要です。

      *> READでもFILE STATUSを確認する典型パターン
           READ SALES-FILE.
           EVALUATE WS-FILE-STATUS
               WHEN "00"
                   DISPLAY "読み込み成功"
               WHEN "10"
                   DISPLAY "ファイルの終わりです"
               WHEN OTHER
                   DISPLAY "予期しないエラー: " WS-FILE-STATUS
                   STOP RUN
           END-EVALUATE.

第3章のEVALUATE文が、ここでもエラーハンドリングの整理に活躍していますね。FILE STATUSは、次章で学ぶ索引編成ファイルの INVALID KEY とあわせて、実務のCOBOLプログラムでは欠かせないエラーハンドリングの基本です。

試すには

存在しないファイル名を ASSIGN TO に指定して OPEN INPUT した場合、WS-FILE-STATUS にどんなコード(35など)が入るか、環境があれば実際に試してみましょう。FILE STATUSを見ずに処理を進めてしまうと、どんな問題が起きそうか考えてみるのも良い練習です。