IOSTAT 指定子 を使うと,I/O エラーの発生後にプログラムの実行を続け,I/O 操作に関する情報を返すことができます。「Visual Fortran 実行時エラー」で説明しているように,一部のエラーは IOSTAT では返されません。
IOSTAT 指定子は制御を移しますが,返すことができる情報は Visual Fortran RTL から返されたものだけです。これ以上のエラー処理機能については,GERROR および PERROR ルーチンを参照してください。
IOSTAT 指定子は,END,EOR,および ERR による飛越し転送を補足または置き換えることができます。
IOSTAT 指定子を含んでいる I/O 文が実行されると,エラー・メッセージの表示は禁止されます。また,プログラムが終了した場合,次に示すように整数変数,配列要素,またはスカラ欄引用が終了コードとして返されます。
停留読み取りの際に記録終了条件が発生した場合,値 -2
ファイル終了条件が発生した場合,値 -1
通常の完了の場合,値 0 (エラー状態,ファイル終了条件,記録終了条件のいずれでもない場合)
エラー状態が発生した場合,正の整数値 (この値は,「Visual Fortran 実行時エラー」に示している Fortran 特有の IOSTAT 番号の 1 つです)
I/O 文の実行と IOSTAT 値の割り当てが行われた後,制御は (指定されている場合) END,EOR,または ERR 文の文番号に移ります。制御が移らない場合,通常の実行が続けられます。制御の転送についての詳細は,「飛越し文」を参照してください。
プログラムに iosdef.for ファイルをインクルードすると,IOSTAT 値のシンボル定義を利用できるようになります。
次の例は,IOSTAT 指定子と iosdef.for ファイルを使って,OPEN 文のエラー (FILE 指定子の中) を処理しています。
OPEN 文のファイル名のエラー処理
CHARACTER(LEN=40) :: FILNM INCLUDE 'iosdef.for' DO I=1,4 FILNM = '' WRITE (6,*) 'Type file name ' READ (5,*) FILNM OPEN (UNIT=1, FILE=FILNM, STATUS='OLD', IOSTAT=IERR, ERR=100) WRITE (6,*) 'Opening file: ', FILNM ! 入力ファイルを処理します。 CLOSE (UNIT=1) STOP 100 IF (IERR .EQ. FOR$IOS_FILNOTFOU) THEN WRITE (6,*) 'File: ', FILNM, ' does not exist ' ELSE IF (IERR .EQ. FOR$IOS_FILNAMSPE) THEN WRITE (6,*) 'File: ', FILNM, ' was bad, enter new file name' ELSE PRINT *, 'Unrecoverable error, code =', IERR STOP END IF END DO WRITE (6,*) 'File not found. Locate correct file with Explorer and run again' END PROGRAM
DO ループ内で,変数 FILNM に値を割り当てる READ 文の代わりに,GetOpenFileName Win32 ルーチンを呼び出すこともできます。このルーチンは,ダイアログボックスを使ってファイル名の入力をユーザーに要求します。GetOpenFileName ルーチンの呼び出し方の例については,...Df98\Samples\Advanced\Win32\GetOpenFileName にある GetOpenFileName サンプルを参照してください。