连续fortran读数中的EOF

时间:2014-05-23 11:59:38

标签: io fortran

通过IOSTAT的{​​{1}}参数检测fortran中的EOF时,如下所示:

READ

nLines=0 DO READ(unit,'(A)',IOSTAT=Error) Line IF (Error /= 0) EXIT nLines=nLines+1 END DO 变量究竟何时获得非零值?是在读取文件的最后一行还是在此之后尝试新的读取时?是否取决于在写入文件时是否使用了Error指令?它是编译器依赖的吗?

如果它是编译器相关的,我怎么能以更便携的方式计算文件中的行数?

2 个答案:

答案 0 :(得分:1)

当read语句未成功完成时,iostat参数将获得非零值。发生错误,或遇到了行结束或记录结束条件。然后,未读取正在读取的变量的值。

因此,如果文件中的最后一个记录(行)被格式化并正确终止,则iostat参数在读取后将为零,并且在后续读取语句中将为非零。

答案 1 :(得分:1)

读取endfile记录时会触发Error将获得非零值的文件结束条件。此endfile记录是文件中的单独记录(不需要具有物理表现形式),因此,正如Vladimir F states一样,正确的“数据”记录将导致Error为零。

endfile语句写入的结束文件记录始终写为“下一条记录”,因此,特别是,当有记录时,Error的值不会为非零无论使用endfile

,都可以成功阅读

此“下一条记录”也适用于通过非前进I / O写入的记录,因此即使在这种情况下,也不会看到(部分)读取记录和文件结尾。

最后,值得一提的是,在文件结束条件下,Error的值将设置为常量IOSTAT_END(来自内部模块iso_fortran_env),因此您可以检查此值以区别于读取错误。