openとclose
openでファイルと装置番号を結びつけ、処理が終わったらcloseします。newunitを使うと装置番号を自分で決めずに済みます。
ファイルを開くFORTRAN
integer :: unit, ios
open(newunit=unit, file='data.txt', status='old', &
action='read', iostat=ios)
if (ios /= 0) stop 'data.txtを開けません'
! ここでreadを行う
close(unit)status='old'は存在するファイルを開く指定です。新規作成ならstatus='replace'などを使います。
行を読み込んで集計する
ファイル末尾や読み込みエラーはiostatで判定できます。次の例は、1行に1つの整数があるnumbers.txtを読み込みます。
read_sum.f90FORTRAN
program read_sum
implicit none
integer :: unit, ios, value, total
total = 0
open(newunit=unit, file='numbers.txt', status='old', &
action='read', iostat=ios)
if (ios /= 0) stop 'open error'
do
read(unit, *, iostat=ios) value
if (ios /= 0) exit
total = total + value
end do
close(unit)
print *, total
end program read_sum入力と実行結果TEXT / OUTPUT
numbers.txt
10
20
35
65計算結果を書き込む
結果ファイルはstatus='replace'で作り直し、write(unit, *)で書き込みます。日本語を扱う場合は実行環境の文字コードも確認してください。
result.f90FORTRAN
program write_result
implicit none
integer :: unit, ios
open(newunit=unit, file='result.txt', status='replace', &
action='write', iostat=ios)
if (ios /= 0) stop 'open error'
write(unit, '(A,I0)') 'total = ', 65
close(unit)
end program write_result確認COMMAND / OUTPUT
gfortran result.f90 -o result && ./result
cat result.txt
total = 65練習
点数を1行ずつ読み込み、合計、人数、平均をsummary.txtへ書き出してください。空ファイルの場合に0で割らない条件も追加します。