Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Fortran, File Read Error( Tried to read past )

  1. Feb 17, 2013 #1
    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 (Text):
    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: Feb 17, 2013
  2. jcsd
  3. Feb 17, 2013 #2

    SteamKing

    User Avatar
    Staff Emeritus
    Science Advisor
    Homework Helper

    Re: Fortran, File Read Error("Tried to read past...")

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

    Also make sure N <= 40 in the data file.
     
  4. Feb 17, 2013 #3
    Re: Fortran, File Read Error("Tried to read past...")

    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.
     
  5. Feb 17, 2013 #4

    SteamKing

    User Avatar
    Staff Emeritus
    Science Advisor
    Homework Helper

    Re: Fortran, File Read Error("Tried to read past...")

    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.
     
  6. Feb 17, 2013 #5
    Re: Fortran, File Read Error("Tried to read past...")

    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.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Fortran, File Read Error( Tried to read past )
  1. Read file in fortran (Replies: 2)

Loading...