Fortran

Fortranのファイル処理とエラー

データをファイルから読み込み、計算結果を安全に保存します。

Fortran入門の講座一覧

01

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'などを使います。

02

行を読み込んで集計する

ファイル末尾や読み込みエラーは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
03

計算結果を書き込む

結果ファイルは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
04

練習

点数を1行ずつ読み込み、合計、人数、平均をsummary.txtへ書き出してください。空ファイルの場合に0で割らない条件も追加します。