我已經檢查過類似的帖子。解決方案是由M. S. B.在這裏Reading data file in Fortran with known number of lines but unknown number of entries in each line當輸入文件中有一個變量丟失時,從文件中讀取已知數量的變量
所以,我遇到的問題是,從文本文件我試圖讀取輸入。在一行中應該有3個變量。但有時輸入文件可能有2個變量。在這種情況下,我需要使最後一個變量爲零。我嘗試在IOSTAT中使用READ語句,但如果只有兩個值,它會轉到下一行並讀取下一個可用值。當沒有第三個值時,我需要在讀取2個值後停止在第一行。
我發現一種方法是讓一個評論/除了我試圖讀取的類型(在這種情況下,我閱讀的浮點數,而評論是一個字符)這使得IOSTAT> 0,我可以用它作爲支票。但是如果在某些情況下我可能沒有那個評論。我想確保它甚至比它更有效。代碼
read(15,*) x
read(15,*,IOSTAT=ioerr) y,z,w
if (ioerr.gt.0) then
write(*,*)'No value was found'
w=0.0;
goto 409
elseif (ioerr.eq.0) then
write(*,*)'Value found', w
endif
409 read(15,*) a,b
read(15,*) c,d
輸入文件的
部分是形式
-1.000 abcd
12.460 28.000 8.00 efg
5.000 5.000 hijk
20.000 21.000 lmno
我需要做,即使沒有「8.00 EFG」
這種情況下,它工作的
-1.000 abcd
12.460 28.000
5.000 5.000 hijk
20.000 21.000 lmno
I ca n不使用MSB建議的字符串方法。有沒有其他方法?
另一個想法,但沒有提到,就是預處理與寫的是一種語言的腳本輸入文件更適合這類任務(python,perl甚至awk想起來)......看起來這種方法會更簡單和更強大。 – mgilson 2012-04-11 11:43:10
這是一個完美的建議。但是,我正在編寫20年前編寫的代碼,此時無法更改輸入文件格式。 – jonayat 2012-04-11 15:14:47
我並不是建議你改變輸入文件的(預期)格式,只使用腳本將原始格式不正確的文件打包成符合你的代碼(20年前寫的)所需的文件。 – mgilson 2012-04-11 16:21:54