Fortran中使用任意格式符'*'时,如何替代read语句的end标签?
Fortran中使用
*格式符时处理文件结束的替代方案 首先需要澄清:符合Fortran标准的编译器(如GCC gfortran、Intel Fortran)是支持read(unit, *, end=label)语法的,你遇到的限制可能来自旧版本编译器或特定编译选项。如果确实无法使用end=标签,可采用以下两种替代方案:
方案1:通过iostat参数捕获状态码
利用iostat返回的状态值判断文件状态:
- 当
iostat < 0时,表示已到达文件末尾 - 当
iostat > 0时,表示读取出现错误 - 当
iostat = 0时,表示读取成功
示例代码:
integer :: ios, var1, var2 do ! 读取数据并捕获状态 read(1, *, iostat=ios) var1, var2 ! 到达文件末尾则退出循环 if (ios < 0) exit ! 处理读取错误 if (ios > 0) then print *, "读取数据时发生错误" exit end if ! 处理读取到的数据 print *, "读取到:", var1, var2 end do
方案2:使用eof()函数判断文件结束
在循环中先检查文件是否已到末尾,再执行读取操作:
示例代码:
integer :: var1, var2 do while (.not. eof(1)) read(1, *) var1, var2 ! 处理读取到的数据 print *, "读取到:", var1, var2 end do
注意:eof()函数检查的是当前文件指针之后是否还有数据,若文件最后一行读取完成后,eof()才会返回.true.,因此该方式不会遗漏数据,但需注意文件中存在空行的情况可能导致异常。
内容的提问来源于stack exchange,提问作者ifffam
相关产品推荐
相关产品推荐

