使用读取命令的意外文件结尾
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
当然,这也可能会或可能不会工作,具体取决于编译器..
显然修复文件是最好的选择(应该修复创建此文件的任何程序)
我正在尝试从 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
当然,这也可能会或可能不会工作,具体取决于编译器..
显然修复文件是最好的选择(应该修复创建此文件的任何程序)