IOSTAT 指定子と Fortran 終了コードの使用

IOSTAT 指定子 を使うと,I/O エラーの発生後にプログラムの実行を続け,I/O 操作に関する情報を返すことができます。「Visual Fortran 実行時エラー」で説明しているように,一部のエラーは IOSTAT では返されません。

IOSTAT 指定子は制御を移しますが,返すことができる情報は Visual Fortran RTL から返されたものだけです。これ以上のエラー処理機能については,GERROR および PERROR ルーチンを参照してください。

IOSTAT 指定子は,ENDEOR,および ERR による飛越し転送を補足または置き換えることができます。

IOSTAT 指定子を含んでいる I/O 文が実行されると,エラー・メッセージの表示は禁止されます。また,プログラムが終了した場合,次に示すように整数変数,配列要素,またはスカラ欄引用が終了コードとして返されます。

I/O 文の実行と IOSTAT 値の割り当てが行われた後,制御は (指定されている場合) ENDEOR,または 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 サンプルを参照してください。