Fortran Fortran, File Read Error( Tried to read past )

AI Thread Summary
The discussion revolves around a Fortran program designed to read a data file and calculate the line of best fit for given data points. The user encountered a "attempted to read past end of file" error during execution, specifically at a DO loop intended to read N rows of data. The issue was traced to the format string used in the READ statement. Initially, the format was set to read two floating-point numbers with 'FMT='(F8.1)', which led to the program only reading the x values and ignoring the corresponding y values. The solution involved changing the format to a list-oriented approach by using 'READ(1,*)', allowing the program to read both x and y values correctly without format constraints. Additionally, it was confirmed that the number of data points (N) in the file was less than or equal to 40, aligning with the program's array size. The adjustments resolved the file read error and enabled successful computation of the line of best fit.
Ordain
Messages
5
Reaction score
0
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 successful 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:
Technology news on Phys.org


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

Also make sure N <= 40 in the data file.
 


SteamKing said:
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.
 


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.
 


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.
 
Dear Peeps I have posted a few questions about programing on this sectio of the PF forum. I want to ask you veterans how you folks learn program in assembly and about computer architecture for the x86 family. In addition to finish learning C, I am also reading the book From bits to Gates to C and Beyond. In the book, it uses the mini LC3 assembly language. I also have books on assembly programming and computer architecture. The few famous ones i have are Computer Organization and...
I have a quick questions. I am going through a book on C programming on my own. Afterwards, I plan to go through something call data structures and algorithms on my own also in C. I also need to learn C++, Matlab and for personal interest Haskell. For the two topic of data structures and algorithms, I understand there are standard ones across all programming languages. After learning it through C, what would be the biggest issue when trying to implement the same data...

Similar threads

Replies
5
Views
5K
Replies
12
Views
3K
Replies
2
Views
769
Replies
16
Views
3K
Replies
12
Views
15K
Replies
1
Views
3K
Replies
5
Views
2K
Back
Top