截至目前,我正在检查iostat是否小于0,如果找不到名单,那么重新打开文件(这真的很难看),即:
read(100, nml=nm_tensor, iostat = ios)
if (ios < 0) then
close(100)
open(100, file="input_nm", status='old', action="read", iostat = ios)
end if
在阅读文件之前,如何检查文件中是否存在名单?当名单不存在并导致文件结束错误时,是否有更优雅的方法进行恢复?
答案 0 :(得分:1)
说你正在阅读的文件是:
&INT_NAMELIST
A = 1,
B = 2
/
&REAL_NAMELIST
X = 3.15,
Y = 2.71
/
然后程序
INTEGER :: A, B
REAL :: X, Y
NAMELIST /INT_NAMELIST/ A, B
NAMELIST /REAL_NAMELIST/ X, Y
OPEN(unit=100, action="READ", status="OLD")
read(100, nml=INT_NAMELIST)
read(100, nml=REAL_NAMELIST)
可以工作,但是改变了read语句的顺序,它不会:
read(100, nml=REAL_NAMELIST)
read(100, nml=INT_NAMELIST)
因为它已经读过INT_NAMELIST
,直到它找到并阅读REAL_NAMELIST
。如果您不确定文件中名单的顺序,则应在每个新名单之前使用REWIND
,将文件位置重置为文件的开头:
read(100, nml=REAL_NAMELIST)
rewind(100)
read(100, nml=INT_NAMELIST)