前回までは、計算結果の入出力を、画面あるいはキーボードより 行ってきました。 今回は、データをファイルから読みこんだり、ファイル に書き出したりするコマンドを学びます。
 
      open(11,file='favorite_name',status='new')
c
      n=0
      do 10 i=1,20
       n=n+1
       write(11,*) n
 10   continue
      end
       

新しいコマンド open が出てきました。まず、これから順にみていきます。
open(装置番号,file='好きなファイル名',status='新しいファイル')
装置番号のところには数字を入れます。(例題には11を入れている) 好きなファイル名には、結果を書き出したいファイル名を入れます。 statusのところは、指定したファイル名が既に存在 する場合には『old』存在しない場合には『new』をいれます。 また『unknown』というのもありますが、 説明は後まわしにします。 さて気付いた方もいるかも知れませんが、今までとwrite文の使い方 が少し違っています。以前はwrite(*,*)と書いてありました。 write(11,*)の11がopen文で用いた装置番号11 に対応しています。アスタリスク*を指定した場合は、write文は6、read文は5 が指定されたものとみなされます。 装置番号が一桁の数字は、システムになんらかの形で使われているため、 open文で指定しない方が無難なようです。
さて、プログラムをコンパイルして実行してみてください。 favorite_nameというファイルができて、そのファイルの中には 1から20までの整数が書かれていると思います。
ちょっと、プログラムを変更して次のようにしてみて コンパイルそして実行をしてみてください。
 
      open(11,file='favorite_name',status='new')
c
      n=0
      do 10 i=1,20
       n=2*i-1
       write(11,*) n
 10   continue
      end
       
おそらくは、うまく実行できなかったのではないでしょうか? 前のプログラムからの変更箇所は5行目だけですが、 これは、何か間違っているのでしょうか?答は否です。 エラーの原因は、1行目 status='new' にあります。実は、 newは新しいファイルを開くという意味で、 既にfavorite_nameというファイルが存在していた場合には、 ファイルを開くことが出来ないんです。 では、どうすればいいかというとnewをoldに書き直してから 再コンパイルし、実行すればいいです。 または、一度favorite_nameという名のファイルを削除しても 正しく実行されます。 しかし、いずれにしても面倒ですね。 そこで、説明を後回しにしていた status='unknown'の出番です。 このunknownは既にファイルが存在する場合にはoldとして 新規のファイルの場合には、newとして働いてくれて重宝します。 特にoldやnewの指定が必要なければunknownを指定すれば いいと思います。私もほとんどunknown指定です。 話がそれますが、上のプログラム3行目n=0 は必要ありません。プログラムが短かければ 書いててもいいんだけど、全く無駄な演算になります。
次は書式について学びましょう。 ここからは、知らなくてもプログラムを書く上で、あまり困らないと 思います。実は私もよく知らないしあまり使ったことがない。 早速、実例をみていきましょう。
 
      con=123.4567
      write(*,1000) 'f6.2',con
      write(*,1001) 'f7.3',con
      write(*,1002) 'f8.4',con
c
      con=-123.4567
      write(*,1003) 'f7.2',con
      write(*,1004) 'f8.3',con
      write(*,1005) 'f9.4',con
      write(*,*) 'default',con
c
 1000 format(f6.2)
 1001 format(f7.3)
 1002 format(f8.4)
 1003 format(f7.2)
 1004 format(f8.3)
 1005 format(f9.4)
      end
新しい命令はformat です。上から順にみていきましょう。 1、5行目でconという変数に7桁の数字を代入しています。 2〜4、6〜8行目では、いままでのばしのばしにしてきたwrite文の新しい 使い方を紹介しています。気がつきましたか? 最初のwrite文の紹介では、write(*,*) という使い方でした。(*,*) はシステムの標準値を用いているということでした。 今回のプログラムでは、右側のアスタリスク*に数字(行番号) を入れていています。この数字は11〜16行目に書いてある format文で指定された書式に従って、出力するという意味です。 よく知らないので例に従ってなんとなく感じをつかんでください。 多分、fの後の数字で表示桁数(コンマをカウントする)を、ドット の後の数字で小数点以下を指定していると思います。(嘘かも) 次の例をみましょう。
 
      open(11,file='orient',status='unknown')
c
      do 10 i=1,10
      num=i
      write(11,900) num
 10   continue
c
 900  format(5hstart,1x,i1,3x,3hend)
      end
このプログラムを実行すると、画面には何も表示されません。 代わりに'orient'というファイルができ、計算結果が 中に書き込まれます。プログラムを実行するディレクトリー に既にorientというファイルが存在するときには注意してください。 ファイルの中身が書き換えられます。orientの中身を 壊したくない場合には1行目のopen文を書き換えてください。 それでは行番号900をみていきます。 5hでは後に続く5つの 文字列を表示(ここではstart)、1x は1文字分のスペース、i1 は一桁の整数(numに入っている値),3x は3文字分のスペース、 3hでは後に続く3つの 文字列を表示(ここではend)。
目次へ