我试图从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
奇怪的是,如果我在文件的末尾强制回车,程序将读取两个整数就好了。
答案 0 :(得分:0)
顺序文件中的每个记录都必须正确终止。文本文件中的记录是行。必须妥善终止它们。在某些编辑器中,这意味着您必须在末尾添加一个空行。必须终止包含数据的每一行。
有些编译器对此问题的敏感程度低于其他编译器,并会为您终止最后一条记录。
答案 1 :(得分:0)
如果你真的需要在读取端解决这个问题(即正确地终止文件的最后一行因某种原因而不实用),你可以尝试将每一行读入一个字符串,然后从字符串中读取内部: / p>
character*80 line
integer i
do ..
read(unit,'(a)')line
read(line,*)i
enddo
当然,根据编译器的不同,这可能也可能不起作用。
显然修复文件是最好的选择(无论什么程序创建此文件都应该修复)