それで、私が手で知らない長さのファイルを読み込もうとしているとします。私たちは必要なときにiostatとwhileループを使用することができますが、これに問題があります。つまり、私が書いたコードは最後の行を2回読み込みます。私は明らかな解決策があると確信していますが、私はそれを把握していないようです。私はread()関数やiostat関数がどれだけ完全に働くか(私はFortranでかなり新しい)を実際に理解していませんが、ドキュメントから多くを集めることができないので、ここの誰かが助けてくれることを望んでいます。 print文から端末への出力は、その後Fortran read()は最後の行を2回読み込みますか?
filename = 'test.txt'
iostat_1 = 0
iostat_2 = 0
open(newunit = lun, file = filename, status = 'old', iostat = iostat_1)
if (iostat_1 == 0) then
do while(iostat_2 == 0)
if(iostat_2 == 0) then
read(lun,*,iostat = iostat_2) dum, real_1,real_2,int_1
print *, dum, real_1,real_2,int_1
endif
enddo
endif
だから、私の入力ファイルを想定すると、
1 1.0 1.0 1
2 2.0 2.0 1
3 3.0 3.0 1
4 4.0 4.0 4
あります。ここでは
は、私が書いたコード(の該当ビット)でありますbe
1 1.0 1.0 1
2 2.0 2.0 1
3 3.0 3.0 1
4 4.0 4.0 4
4 4.0 4.0 4
次の点に注意してください。ここでの主な目的は、 eを任意の数の行と置き換えます。私は最初に行数を読むことに関わる解決策には興味がありません。
ありがとうございました!
私はただ問題を解決しました。それは言われている、私は解決策が私よりも不器用であるかどうか疑問に思います。ここで私はあなたが見つけたとして、あなたはiostat
パラメータを設定すると、read
コマンドは、それがために要求した変数を上書きしません、問題に
! Body of ReInsert
filename = 'rpriov3.dat'
iostat_1 = 0
iostat_2 = 0
open(newunit = lun, file = filename, status = 'old', iostat = iostat_1)
if (iostat_1 == 0) then
do while(iostat_2 == 0)
if(iostat_2 == 0) then
read(lun,*,iostat = iostat_2) dum, real_1,real_2,int_1
if(iostat_2 == 0) then !<---- Added this nested if statement
print *, dum, real_1,real_2,int_1
endif
print *, iostat_2
endif
enddo
endif