READ文,WRITE文,PRINT文
READ文は、外部媒体から内部記憶へデータを転送する。WRITE文,PRINT文は、
内部記憶から外部媒体へデータを転送する。
READ (データ転送指定子並び) [入力項目並び]
READ 書式識別子 [,入力項目並び]
WRITE (データ転送指定子並び) [出入力項目並び]
PRINT 書式識別子 [,出力項目並び]
|
[データ転送指定子]
[UNIT= ]外部ファイル装置
[FMT= ]書式識別子
[NML= ]変数群名
REC= 整変数
IOSTAT= 基本整変数
ERR= 文番号
END= 文番号 (READ文のみ)
ADVANCE= 基本文字式 [YES,NO]
SIZE= 基本整変数 (READ文のみ)
EOR= 文番号 (READ文のみ)
UNIT指定子
外部入出力装置の識別子である。*を指定すると使用するコンパイラの
標準入出力装置を意味する。
UNIT=は、省略可能であるが省略する場合、UNIT指定子は、データ転送指定子の
最初の項目でなければならない。
FMT指定子
書式識別子を指定する。書式識別子は、以下の4つの形式がある。
- 基本文字列……書式を文字列で記述する。
- 文番号…………FORMAT文の文番号を記述する。
- *………………標準的な入出力
- 基本整変数……FORMAT文の文番号を割り当てる。
FMT=は、省略可能であるが省略する場合、最初の項目はUNIT=を省略
したUNIT指定子を指定し、2番目の項目にFMT指定子を記述する。
NML指定子
NAMELIST文で記述した変数群名を指定する。
NML=は、省略可能であるが省略する場合、最初の項目はUNIT=を省略した
UNIT指定子を指定し、2番目の項目にNML指定子を記述する。
REC指定子(整変数)
入出力の記録の番号を指定する。直接検査として接続されている装置を
指定した入出力文だけに指定できる。REC指定子を指定した入出力文を
直接検査入出力文という。
IOSTAT指定子
基本整変数を記述し、次のときに整変数に値が入る。誤りが発生したときの
数値の値は、正負は決まっているが、値は使用するコンパイラによって決まる。
- 通常は、ゼロ
- 誤り条件が発生したときは、正の整数値
- ファイル終了条件が発生し、誤り条件が発生していないときは、負の整数値
- 記録終了条件が発生し、誤り条件もファイル終了条件も
発生していないときは、ファイル終了条件とは異なる負の整数値
ERR指定子(文番号)
入出力文の実行中にエラーが検出されると以下の処理を行う。
- 入出力文の実行を中止
- ファイルの位置は不定となる
- IOSTAT指定子の指定がある場合、指定された変数に正の整数値を入れる
- READ文でSIZE指定子がある場合、指定された変数に整数値を入れる
- ERR指定子で指定した文番号に分岐する
END指定子(文番号) [READ文のみ]
入力文の実行中にファイル終了条件が発生し、かつ、誤り条件が
発生していない場合以下の処理を行う。
- 入力文の実行を中止
- 外部ファイル入力の場合は、ファイル終了記録の後ろに位置付けられる
- IOSTAT指定子の指定がある場合、指定された変数に負の整数値を入れる
- END指定子で指定した文番号に分岐する
ADVANCE指定子(基本文字式)
文字式の値は、YESまたは、NOを指定する。NOを指定すると停留入出力が
行われる。YESが省略時の値である。
停留入出力を使うと画面に入力要求を表示して、改行せずに表示した
文字の直後から入力することができる。
停留入出力の例
WRITE(*,'(A)',ADVANCE='NO') 'INPUT:'
READ(*,*) number
SIZE指定子(基本整変数) [READ文のみ]
停留入出力文が終了したとき、SIZE指定子で指定した変数の値は、
その入力文の実行中にデータ編集記述子によって転送された文字数になる。
SIZE指定子は、ADVANCE指定子の値がNOであるREAD文だけに指定できる。
EOR指定子(文番号) [READ文のみ]
EOR指定子は、ADVANCE指定子の値がNOであるREAD文だけに指定できる。
入力文の実行中に記録終了条件が発生し、かつ、誤り条件が発生していないと
場合以下の処理を行う。
- PAD指定子の値がYESの場合、入力項目および対応するデータ編集記述子が
記録に含まれるより多くの文字数を要求すると記録に空白が補われる。
- 入力文の実行を中止
- ファイルは、現在記録の後ろに位置付けられる
- IOSTAT指定子の指定がある場合、指定された変数に負の整数値を入れる
- SIZE指定子の指定がある場合、指定された変数に整数値を入れる
- EOR指定子で指定した文番号に分岐する
READ文の例
INTEGER :: eof
READ(*,*) i
READ(*,'(2I3)') a,b
READ(UNIT=9,FMT='(2I3)',IOSTAT=eof) x,y
WRITE文の例
WRITE(*,*) i
WRITE(*,'(2I3)') a,b
WRITE(*,'(10F5.2)') (z(i),i=1,10)