使用read命令意外结束文件

时间:2015-04-09 12:44:05

标签: fortran

我试图从Fortran 2003中的网格文件中读取数据,但是我收到了意外的文件运行时错误。 read命令似乎跳过了文件中的某些行。例如,使用此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

奇怪的是,如果我在文件的末尾强制回车,程序将读取两个整数就好了。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

当然,根据编译器的不同,这可能也可能不起作用。

显然修复文件是最好的选择(无论什么程序创建此文件都应该修复)