【发布时间】:2016-12-01 12:01:11
【问题描述】:
我在 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
【问题讨论】:
-
你的意思是
ios的值是5002? -
是的,ios的值为5002。
-
我尝试使用 IOMSG= 并显示不存在的记录号。
-
现在我认为问题很清楚了 - 没有留下任何记录。感谢@francescalus 和他获得描述性信息的建议。
-
integer*4不是有效的 Fortran。它从来都不是任何 ISO Fortran 标准的一部分。