对不起,如果之前有人问过,但我找不到对我有用的答案。我正在使用旧程序,但已对其进行了一些修改。
我可以包含整个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程序写一个新的数据文件,这应该可以解决问题吗?那是对的吗?如果是这样,这里有一个基本的误解,即这是来自其他来源的数据文件的问题吗?
感谢您的耐心等待。
答案 0 :(得分:0)
(在评论中回答。见Question with no answers, but issue solved in the comments (or extended in chat))
OP写道:我已经解决了这个问题 - 程序在不同的地方寻找它,我现在已经纠正了。