Fortran 90运行时错误:文件结束

时间:2014-07-16 15:49:44

标签: fortran runtime-error fortran90

对不起,如果之前有人问过,但我找不到对我有用的答案。我正在使用旧程序,但已对其进行了一些修改。

我可以包含整个2500行程序,但看起来很多。

我已经成功编译了一个程序,但是当我尝试运行它时失败了。我收到了#34; Fortran运行时错误:文件结束"在读取.dat文件的行。我尝试使用相同的.dat文件和相同的变量编译测试段。它会导致同样的问题。

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.0000000e + 000

     

1.7320508e + 000

     

4.1777138e-001

     

1.6710855e + 000

     

4.1777138e-001

这些数字中的每一个都在其自己的行上并且前面有空格

这会生成相同的文件运行时错误。我真的很感激这里的任何帮助。

我应该补充说我是用gfortran编译的。

编辑:

根据以下高性能标志的建议,我已将其修改为包含查询测试。

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

查询声明的结果如下:  Exists = T Name = Sequential = U Formatted = U

我的理解是找到了文件(即存在被返回为真),未命名,格式和顺序访问返回为未知(直接我将在后面包含)。我还检查了以未知方式返回的分隔符和填充。

我的初学者直觉告诉我,我应该尝试使用fortran程序写一个新的数据文件,这应该可以解决问题吗?那是对的吗?如果是这样,这里有一个基本的误解,即这是来自其他来源的数据文件的问题吗?

感谢您的耐心等待。

1 个答案:

答案 0 :(得分:0)

(在评论中回答。见Question with no answers, but issue solved in the comments (or extended in chat)

OP写道:

  

我已经解决了这个问题 - 程序在不同的地方寻找它,我现在已经纠正了。