我在Fortran中读取文件有点问题。正如您所看到的,我正在阅读一个文件,读取特定长度的某些记录。
当遇到某条记录时,我会收到IOSTAT错误5002.现在我的问题是这个错误是什么意思:它是文件结尾还是没有剩下的记录或其他什么?我可以忽略它吗?
我正在使用MinGW GFortran 4.8.0。
以下是代码:
PROGRAM test_read
INTEGER*4 HCM_error
DOUBLE PRECISION N_Record(22)
CHARACTER*8 C_Record(22)
EQUIVALENCE (N_Record,C_Record)
OPEN (UNIT=11, FILE='C:/BORDER/D__HOL.000',STATUS='OLD', ACCESS='DIRECT',RECL=176, ACTION='READ', IOSTAT=IOS)
HCM_error=0
DO N_rec = 1, 2000
READ (11, REC=N_rec, IOSTAT=IOS) C_Record
WRITE(*,*) "|",IOS,' ',N_rec,' ',N_record(21),' ',N_record(22),"|"
!End of file reached (or non existing record) ?
IF ((IOS .LT. 0) .OR. (IOS .EQ. 36)) EXIT
IF (IOS .NE. 0) THEN
!Error in (border-) line data
HCM_Error = 1049
EXIT
END IF
END DO
CLOSE(UNIT=11)
WRITE (*,*) HCM_error
END PROGRAM
答案 0 :(得分:3)
iostat=
说明符返回的非零值不能跨编译器移植。如果您想确定特定代码的含义,那么您有两个选择:
iomsg=
说明符与字符变量在这种情况下,当您尝试iomsg=
时,您收到了消息"不存在的记录编号"。所以,问题解决了。
您可能会惊讶地发现,您正在直接访问记录,但正在达到"没有记录"没有先到达文件结尾的状态"州。您正在使用评论"来测试(IOS .LT. 0)
!到达文件结尾"。
当读取为直接访问而连接的文件时,文件结束条件不会出现。
如果检测到记录不是文件末尾的有效数字,您可以做些什么?可移植性不大,但来自iostat=
的任何正数表示错误情况。但是,你现在知道这个特殊的5002
意味着什么。
我还应该补充说,只有在没有成功的情况下,iomsg=
的字符变量才由转移语句定义。只有在您知道转移失败时才考虑它。