Fortran 90运行时错误:文件结束
如果以前有人问过这个问题,我很抱歉,但我找不到一个似乎对我有用的答案。我正在使用一个旧程序,但对它做了一些修改 我可以包括整个2500行程序,但这似乎是很多 我已经成功地编译了a程序,但当我尝试运行它时失败了。我在读取.dat文件的行中得到一个“Fortran运行时错误:文件结束”。我尝试编译一个测试段,使用相同的.dat文件和相同的变量。这导致了同样的问题Fortran 90运行时错误:文件结束,fortran,runtime-error,fortran90,Fortran,Runtime Error,Fortran90,如果以前有人问过这个问题,我很抱歉,但我找不到一个似乎对我有用的答案。我正在使用一个旧程序,但对它做了一些修改 我可以包括整个2500行程序,但这似乎是很多 我已经成功地编译了a程序,但当我尝试运行它时失败了。我在读取.dat文件的行中得到一个“Fortran运行时错误:文件结束”。我尝试编译一个测试段,使用相同的.dat文件和相同的变量。这导致了同样的问题 PROGRAM OPEN INTEGER (KIND=1), PARAMETER :: dy=3 ! number of income s
PROGRAM OPEN
INTEGER (KIND=1), PARAMETER :: dy=3 ! number of income states
INTEGER (KIND=2) :: OpenStatus
REAL, DIMENSION(dy) :: grid,wt
OPEN(1,file='cygdrive/user/mk.dat',status='old',form='formatted',IOSTAT=OpenStatus)
READ (1,*) grid, wt
IF(OpenStatus>0) STOP 'cannot open mk.dat'
CLOSE(1)
PRINT*, grid(1)
END PROGRAM
引用的数据文件是:
-1.7320508e+000
0.0000000 E+000
1.7320508e+000
4.1777138e-001
1.6710855e+000
4.1777138e-001
这些数字中的每一个都在自己的线上,前面有一个空格
这将生成相同的文件结束运行时错误。我真的很感激这里的任何帮助
我应该补充一点,我是用gfortran编译的
编辑:
根据下面HighPerformanceMark的建议,我对其进行了修改,以包含一个inquire测试
PROGRAM TEST
CHARACTER :: fnm, seq, fort
Logical :: lex
INTEGER (KIND=1), PARAMETER :: dy=3 ! number of income states
INTEGER (KIND=2) :: j,j0,j1,j2,j4,j5,j6,j7,k,jjj,jj,dyy,OpenStatus
REAL, DIMENSION(dy) :: grid,wt
OPEN(1,file='cygdrive/user/mk.dat',status='old',form='formatted',IOSTAT=OpenStatus)
INQUIRE (1, EXIST=lex, NAME=fnm, SEQUENTIAL=seq, FORMATTED=fort)
PRINT*, 'Exists=',lex, ' Name=',fnm, ' Sequential=', seq, 'Formatted=', fort
READ (1,*) grid, wt
IF(OpenStatus>0) STOP 'cannot open mk.dat'
CLOSE(1)
PRINT*, grid(1)
END PROGRAM
inquire语句的结果是:
Exists=T Name=Sequential=U格式化=U
我的理解是,文件被找到(即exists作为true返回)、未命名,并且格式和顺序访问返回为unknown(正如我稍后介绍的direct)。我还检查了分隔符和填充符,它们作为未知返回
我的初学者直觉告诉我,我应该尝试用fortran程序编写一个新的数据文件,这样就可以解决问题了?对吗?如果是,这里是否存在根本性的误解,即这是来自其他来源的数据文件的问题
感谢您的耐心。(在评论中回答。请参阅)
OP写道:
我已经解决了这个问题,程序在另一个地方寻找它,我现在已经纠正了这个问题
什么意思是在第251行出现运行时错误(不要告诉我们哪一行是第251行,弄清楚这一点要有趣得多)调用.dat文件?。如果您指的是
open
语句,请立即测试iostat
是否成功。现在,您的代码将忽略错误代码,并继续尝试读取两个值,然后测试错误代码。你确定文件在程序查找的地方吗?如果您确定,请使用inquire
语句收集确认信息。您好,很抱歉原始帖子不够清晰。我希望我现在已经修好了。实际上是read语句导致了错误。我已将调查声明的结果合并到原始帖子中。如果你能透露一些情况,我将不胜感激。Cheers打开状态检查应放在打开语句之后。你现在的询问毫无用处!使用基于文件名而不是单元号的查询。如果是在单元号上,则必须在检查之后。现在,您从查询中打印的数据似乎只是垃圾。现在投票结束这个问题,OP的评论表明程序没有错误。这个问题在这里没有持久的价值。