【问题标题】:Unexpected end of file with the read command使用读取命令意外结束文件
【发布时间】:2015-04-09 12:44:05
【问题描述】:

我正在尝试从 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

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

【问题讨论】:

  • 嗯,对我有用(gfortranifort)。
  • @AlexanderVogt 我自己也遇到过类似的问题。最后一行必须正确终止。
  • 我明白了...我的编辑 (vim) 为我做这件事 ;-)
  • stackoverflow.com/questions/29526117/… 中的问题也可能完全一样。
  • 在 Windows 上,我在某些编译器上看到了相同的行为。

标签: fortran


【解决方案1】:

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

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

当然,这取决于编译器可能会也可能不会起作用..

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      相关资源
      最近更新 更多