内部 READ 文の形式と規則

内部 READ 文は,内部ファイルから入力データを転送します。

内部 READ 文には書式付きのものしかありません。これは書式指定子を含んでいる必要があります (並び書式が使用可能)。変数群書式は使用できません。

内部 READ 文は次の形式を取ります。

READ (iunit,format[,iostat][,err][,end]) [io-list]

詳細は,「READ」を参照してください。

書式付き内部 READ 文は,編集のための書式仕様を使用して (存在する場合),データを文字列から 2 進形式に変換します。変換されたデータは,I/O 並び中の要素に,それらの要素が現れる順に (左から右に) 代入されます。

この形式の READ 文は,書式が BN 形編集記述子で始まるかのように動作します (BZ 形編集記述子を明示的に指定することで,この動作を無効にすることができます)。

値は組込み型または構造型のオブジェクトに転送することができます。構造型の場合,最終的にこれらの構造化されたオブジェクトを構成する組込み型の構成要素に組込み型の値が転送されます。

データ転送が行われる前に,ファイルは最初の記録の先頭に置かれます。この記録が現在の記録になります。

I/O 並び項目の数が入力記録の欄の数よりも少ない場合,文は余った欄を無視します。

I/O 並び項目の数が入力記録欄の数よりも多い場合,入力記録に空白が充填されます。ただし,ファイル接続に対して PAD='NO' が指定されていた場合,入力並びとファイル仕様は,それが含んでいるよりも多くの文字数を記録から要求してはなりません。

並び書式では,文字列は区切り文字を含みません。

次のプログラムの一部は,記録を読み取り,最初の文字を調べて,残りのデータを 10 進,8 進,16 進のいずれとして解釈すればいいかを判断します。その後,内部 READ 文を使って文字表現から 2 進値への適切な変換を行います。

	INTEGER IVAL
	CHARACTER TYPE, RECORD*80
	CHARACTER*(*) AFMT, IFMT, OFMT, ZFMT
	PARAMETER (AFMT='(Q,A)', IFMT= '(I10)', OFMT= '(O11)', &
			ZFMT= '(Z8)')
	ACCEPT AFMT, ILEN, RECORD
	TYPE = RECORD(1:1)
	IF (TYPE .EQ. 'D') THEN
	  READ (RECORD(2:MIN(ILEN, 11)), IFMT) IVAL
	ELSE IF (TYPE .EQ. 'O') THEN
	  READ (RECORD(2:MIN(ILEN, 12)), OFMT) IVAL
	ELSE IF (TYPE .EQ. 'X') THEN
	  READ (RECORD(2:MIN(ILEN, 9)),ZFMT) IVAL
	ELSE
	  PRINT *, 'ERROR'
	END IF
	END

関連情報