RoboMasters PV (JPN Ver.)
アニメ『ROBOMASTERS THE ANIMATED SERIES』(2017)
メガネ率高いです。
さてFORTRANです。
前回「FORTRAN(ファイル書き込み)」でファイルへデータを書き込みしましたが、次はこのファイルを読み込みしてみます。
catで見るとこのようなデータになっています。
takk@deb9:~$ cat sample.txt 110 220 330 takk@deb9:~$
読み込みのプログラムは書き込みプログラムをWRITEからREADに変えればよいです。その際、OPENのSTATUSはOLDにします。OLDという表現が妥当かどうか分かりませんが、既存ファイルの意味です。
takk@deb9:~$ cat read-file.f PROGRAM MAIN OPEN(UNIT=10,FILE='sample.txt',STATUS='OLD', 1ACCESS='SEQUENTIAL') READ (10,*) I,J,K WRITE(*,22222) I,J,K CLOSE(10,STATUS='KEEP') 11111 FORMAT(I5) 22222 FORMAT('I =',I5,',J=',I5,',K=',I5) STOP END takk@deb9:~$
実行すると各変数に各データが格納されていることが分かります。
takk@deb9:~$ gfortran read-file.f takk@deb9:~$ ./a.out I = 110,J= 220,K= 330 takk@deb9:~$
読み込みファイルのフォーマットは、どうやら空白がデータの区切り文字となっているようですが、空白の数はいくつでもよいのでしょうか。まずは一つから。
takk@deb9:~$ cat sample.txt 110 220 330 takk@deb9:~$ ./a.out I = 110,J= 220,K= 330 takk@deb9:~$
空白一つでも問題ないようです。
100個ぐらいの空白を入れて確認してみましょう。
takk@deb9:~$ perl -e '$s=" " x 100;print"110${s}220${s}330\n"' > sample.txt takk@deb9:~$ wc -L sample.txt 209 sample.txt takk@deb9:~$
空白100 * 2 + 3文字 * 3 = 209なので、サイズは一致しますね。
実行してみます。
takk@deb9:~$ ./a.out I = 110,J= 220,K= 330 takk@deb9:~$
問題なく読み込みできました。
読み込む時に指定する書式が間違っているとどうなるのでしょうか。
takk@deb9:~$ cat read-file-f.f PROGRAM MAIN OPEN(UNIT=10,FILE='sample.txt',STATUS='OLD', 1ACCESS='SEQUENTIAL') READ (10,11111) I,J,K WRITE(*,22222) I,J,K CLOSE(10,STATUS='KEEP') 11111 FORMAT(3I5) 22222 FORMAT('I =',I5,',J=',I5,',K=',I5) STOP END takk@deb9:~$ gfortran read-file-f.f takk@deb9:~$ cat sample.txt 110 220 330 takk@deb9:~$ ./a.out I = 1102,J= 2033,K= 0
空白を無視して読み込まれました。なかなか強引ですね。
コメント