西山 哲子(富士通株式会社
アプリケーションマネジメント・ミドルウェア事業部)
前回は、COBOLのファイル処理の特長についてお話しましたが、今回はファイル処理の「判定方法」について見てみましょう。
COBOLでは、ファイル入出力文の実行後の状態が格納される変数を、ファイルに結び付けて宣言することができます。環境部のファイル管理記述項で、ファイルにFILE STATUS句を記述すると、入出力文実行時に、FILE STATUS句に指定したデータ項目に特定の値が格納され、直前の入出力文の入出力状態が通知されます。
入出力文の後に、このデータ項目の内容をチェックする文を記述することによって、プログラムで入出力文の結果に応じた処理手続きを実行することができます。具体的には、IF文やEVALUATE文などで、入出力の結果が格納されているデータ項目をチェックします。
入出力状態値をチェックしないと、入出力エラーが発生してもプログラムの後続処理の実行が続けられる場合があるため、その後の動作は保証されないので注意が必要です。また、入出力文の実行が成功した場合でも、入出力状態に分類があって、何らかの情報が通知されます。
通知される入出力状態値については、お使いのコンパイラのマニュアルを参照してください。
以下に、FILE STATUS句の記述例を示します。
----------------------------------------------------------------- ----- <環境部> ----- SELECT ファイル FILE STATUS IS 入出力状態値 ----- <データ部> ----- WORKING-STORAGE SECTION. 01 入出力状態値 PIC X(2). ----- <手続き部> ----- OPEN INPUT ファイル. IF 入出力状態値 NOT = "00" THEN PERFORM オープン状態詳細チェック処理. -----------------------------------------------------------------
ファイルのオープン実行後、入出力状態値になんらかの値が設定されます。ここではIF文でこの値を判定し、”00”以外の場合はオープン状態の詳細なチェック処理が実行されるようにしています。
別の方法として、例外処理を記述するためのUSE文とFILE STATUS句を合わせて使用することで、入出力状態に合わせたエラーリカバリ処理などを定義することが可能です。
以下に、USE文とFILE STATUS句の記述例を示します。
----------------------------------------------------------------- ----- <環境部> ----- SELECT 入力用ファイル FILE STATUS IS 入出力状態値 ----- <データ部> ----- WORKING-STORAGE SECTION. 01 入出力状態値 PIC X(2). ----- <手続き部> ----- DECLARATIVES. …(a) IO-ERR SECTION. USE AFTER EXCEPTION PROCEDURE 入力用ファイル. …(b) EVALUATE 入出力状態値 …(c) WHEN "35" DISPLAY "ファイルが存在しません。" WHEN "47" DISPLAY "未オープンファイルに対してREAD文が実行されました。" WHEN "42" DISPLAY "未オープンファイルに対してCLOSE文が実行されました。" WHEN OTHER DISPLAY "その他の状態が発生しました。" END-EVALUATE. DISPLAY ">>>> 処理を継続します。". END DECLARATIVES. : OPEN INPUT 入力用ファイル. …(d) -----------------------------------------------------------------
(a) | USE文は、宣言節に記述します。 |
(b) | 『入力用ファイル』に関する入出力誤りの手続きを定義します。 |
(c) | EVALUATE文で入出力状態値をチェックし、値に合わせてエラーリカバリ処理やエラー通知処理を定義します。(入出力状態値はお使いのコンパイラにより異なります。) |
(d) | 『入力用ファイル』に関してOPENなどの入出力文で何らかのエラーが発生すると(b)の手続きへ制御が移り、その時の入出力状態値によって定義した処理が実行されます。 |
今回は、COBOLのファイル処理の判定方法についてお話しました。
次回の「COBOLのはなし」をお楽しみに。