使用读取命令的意外文件结尾

Unexpected end of file with the read command

我正在尝试从 Fortran 2003 中的网格文件读取数据,但遇到文件运行时意外结束错误。读取命令似乎跳过了文件中的某些行。例如,使用此 sample.txt 文件:

      1   2   2   0       1    1132    1131    1165
      2   2   2   0       2    1099    1061    1060

我想从每一行读取第一个整数,所以我的程序是:

program read_file
implicit none
  integer :: ierr, i, j
  open(unit=10,file='sample.txt',status='old',action='read',iostat=ierr) 
  read(10,*) i
  read(10,*) j
  write(*,*) i, j
end program read_file

在运行时,我得到

Fortran runtime error: End of file

奇怪的是,如果我在文件末尾强制输入一个回车 return,程序将很好地读取这两个整数。

顺序文件中的每条记录都必须正确终止。文本文件中的记录是行。它们必须正确终止。在某些编辑器中,这意味着您必须在末尾添加一个空行。包含数据的每一行都必须终止。

有些编译器对这个问题的敏感度低于其他编译器,它们会为您终止最后一条记录。

如果你真的需要在读取端解决这个问题(即由于某种原因正确终止文件的最后一行是不切实际的)你可以尝试将每一行读入一个字符串,然后从字符串内部读取:

 character*80 line
 integer i
 do ..
    read(unit,'(a)')line
    read(line,*)i
 enddo

当然,这也可能会或可能不会工作,具体取决于编译器..

显然修复文件是最好的选择(应该修复创建此文件的任何程序)