Fortran, File Read Error( Tried to read past )

  • Fortran
  • Thread starter Ordain
  • Start date
  • #1
5
0

Main Question or Discussion Point

Fortran, File Read Error[Resolved itself, fixed]

Basically I'm writing a simple fortran program to read in a data file formatted as shown below and then calculate the line of best fit for the given data points.

N
x1 y2
x2 y2
. .
. .
. .
xn yn

Where N is the number of rows in the data file. The code is shown below, compiles fine but when I run the program and input the data file name say, "info.dat" I get a "attempted to read past end of file" error at line 21, which is where my DO loop is, but the do loop is only from 1 to N, so what could be the issue?

Code:
PROGRAM LineOfBestFit
IMPLICIT NONE
REAL:: xavg,yavg, sumx, sumxy,sumxx,sumy,slope,intercept
REAL,DIMENSION(40)::x, y
INTEGER::N,i, iostat,openstatus !N is the number of points which will be first line of data file 
CHARACTER::filename*20
sumx=0
sumxy=0
sumxx=0
sumy=0
[B]PRINT*,[/B] "Enter the name of the data file which contains the data to be evaluated."
[B]READ*,[/B] filename
[B]OPEN[/B](UNIT=1,FILE=filename,STATUS='OLD',IOSTAT=OpenStatus)
     !Check for succesful open.
     [B]IF[/B](OpenStatus>0)[B]THEN[/B]
        PRINT*, "Unable to open file!"
        [B]STOP[/B]
     [B]ENDIF[/B]
[B]READ[/B](1,*)N
[B]DO[/B] i=1,N
  [B] READ[/B](1,FMT='(F8.1)')x(i),y(i)
   sumx=sumx+x(i)
   sumy=sumy+y(i)
   sumxy=sumxy+x(i)*y(i)
   sumxx=sumxx+x(i)**2
[B]ENDDO[/B]
CLOSE(1)!Done with file, so close it.
xavg=sumx/N
yavg=sumy/N
slope=(sumxy-sumx*yavg)/(sumxx-sumx*xavg)
intercept=yavg-slope*xavg
WRITE(*,10) "The line of best fit is: y=",slope,"x+",intercept
10 FORMAT(A,F4.2,A,F4.2)
[B]ENDPROGRAM[/B] LineOfBestFit
Thanks Fellas.
 
Last edited:

Answers and Replies

  • #2
SteamKing
Staff Emeritus
Science Advisor
Homework Helper
12,796
1,666


Try making your format string FMT = '2F8.1' when reading your x and y values.

Also make sure N <= 40 in the data file.
 
  • #3
5
0


Try making your format string FMT = '2F8.1' when reading your x and y values.

Also make sure N <= 40 in the data file.
N was definitely less than forty in the data file, I tinkered around with the code a bit and replaced the f8.1 with the standard *. Seemed to resolve the problem, I imagine the issue was that I only read the leftmost column and skipped the right column.
 
  • #4
SteamKing
Staff Emeritus
Science Advisor
Homework Helper
12,796
1,666


I'm going on memory, but when you use a single format enclosed in parenthesis, like '(F8.1)', FORTRAN will keep using this format, but after reading one value, the format is repeated only after a new record (or new line) is issued. So, in your program, you would have read a sequence of x values, but the y values would be ignored.
 
  • #5
1,065
53


The best thing to do, here, is to NOT use a format string in your READ statement and just let it be (1,*) ...this is what you did when reading the integer number...

If you specify a format, then, if the numbers are not exactly like that, you may have difficulties...just leave it (n,*)...this is called "list oriented" and it is the only thing I ever use...for reading, that is.
 

Related Threads on Fortran, File Read Error( Tried to read past )

Replies
4
Views
8K
Replies
5
Views
926
  • Last Post
Replies
2
Views
2K
Replies
1
Views
5K
Replies
4
Views
3K
Replies
5
Views
5K
  • Last Post
Replies
7
Views
7K
Replies
1
Views
15K
Replies
5
Views
4K
Top