FIX: Record Not Advanced If Branching to ERR= on READLast reviewed: September 16, 1997Article ID: Q75757 |
5.00 5.10 | 5.00 5.10
MS-DOS | OS/2kbprg kbfixlist kbbuglist The information in this article applies to:
SYMPTOMSUnexpected or incorrect results may be generated while reading a file.
CAUSEWhen an error is encountered on a READ statement containing an ERR=label field, the program correctly branches to the error label, and the file pointer remains positioned after the point where the error occurred. Upon reading the file again, if any data remains on that record, the READ statement will fill variables with values from that record. Although this practice may at times appear unintuitive, the ANSI standard is unclear about where the file pointer should be positioned following an error branching on the READ statement. However, if no variables remain on a record in which an error is branched to upon a prior READ statement, when reading from the file again, the next variable is filled with a zero. See the sample code for more information.
RESOLUTIONForce the file pointer to advance to the next record.
STATUSMicrosoft has confirmed this to be a problem in Microsoft FORTRAN versions 5.0 and 5.1. This problem was corrected in FORTRAN PowerStation, version 1.0.
MORE INFORMATIONThe following code can be used to reproduce the problem with a test.dat of
1 2 3 a 5 6 7 8 9 10 Sample Code #1
open(1,file='test.dat') do 10 j=1,10 read(1,'(i3)',err=100,end=200) i print*,i10 continue stop100 print*,'read error' goto 10200 end The above code produces the following results:
1 2 3read error 0 ! Not advancing to next record at this point 5 6 7 8 9 10The following code forces the file pointer to advance to the next record when an error is encountered during a READ statement:
Sample Code #2
open(1,file='test.dat') do 10 j=1,10 read(1,'(i3)',err=100,end=200) i print*,i 10 continue stop 100 print*,'read error' read(1,*) ! advance to next record goto 10 200 endThe output for the above code is as follows:
1 2 3read error 5 6 7 8 9 10 |
Additional reference words: 5.00 5.10 buglist5.00 buglist5.10 fixlist1.00
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |