Microsoft KB Archive/75757

= FIX: Record Not Advanced If Branching to ERR= on READ =

Article ID: 75757

Article Last Modified on 12/1/2003

-

APPLIES TO


 * Microsoft FORTRAN Compiler 5.0
 * Microsoft FORTRAN Compiler 5.1
 * Microsoft FORTRAN Compiler 5.0
 * Microsoft FORTRAN Compiler 5.1

-



This article was previously published under Q75757



SYMPTOMS
Unexpected or incorrect results may be generated while reading a file.



CAUSE
When 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.



RESOLUTION
Force the file pointer to advance to the next record.



STATUS
Microsoft 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 INFORMATION
The 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*,i 10    continue stop 100   print*,'read error' goto 10 200   end The above code produces the following results:

1

2

3

read error

0 ! Not advancing to next record at this point

5

6

7

8

9

10

The 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    end The output for the above code is as follows:

1

2

3

read error

5

6

7

8

9

10

Additional query words: 5.00 5.10 buglist5.00 buglist5.10 fixlist1.00

Keywords: kbfix KB75757

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.