所以,假設我正在嘗試在文件中讀取我之前不知道的長度。我們可以在需要時使用iostat和while循環來中斷,但是我遇到了一個問題。也就是說,我寫的代碼讀取最後一行兩次。我確信有一個明顯的解決方案,但我似乎無法弄清楚。我不太瞭解read()或iostat函數是如何完全工作的(我在fortran中很新穎),但是我不能從文檔中收集很多內容,所以我希望這裏有人能夠提供幫助。Fortran read()讀取最後一行兩次?
這裏是(相關位)的代碼,我已經寫了:
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
然後輸出從打印語句中的終端會是
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與任意數量的行。我對首先讀取行數的解決方案不感興趣。
感謝您的幫助!
更新好的我剛解決了這個問題。話雖如此,我想知道是否有一個解決方案比我的笨拙。這是我做過什麼來解決這個問題
! 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