Fortran Fortran95 datafile extraction help

AI Thread Summary
The discussion revolves around a user seeking assistance with reading data from a file in Fortran 95, specifically when the number of rows is unknown. The user has a data file, "test.dat," containing two columns and potentially 50,000 rows. The main issue encountered is that the read command crashes when it reaches the end of the file. Several solutions are proposed, including using an End of File (EOF) character to determine when to stop reading. A while-loop is suggested as a preferred method for reading files of unknown length. The user is guided to implement a loop that continues reading until the EOF is reached, with examples provided using both a goto statement and an optional IOSTAT parameter to handle the read status. Ultimately, the user resolves the issue by incorporating the END= command in their read statement, successfully reading the data into a matrix.
eth
Messages
3
Reaction score
0
Hello,

I'm pretty new to fortran95 and I've run into a stuck point extracting data from a file, here's what's up:

I have a file test.dat that has 2 columns and variable number of rows (different experiments will yield different amounts of points). I want to put the data into a matrix of equivalent dimensions as the file, if possible. My main issue is that since I won't be able to know the number of rows in the datafile, the "read" command crashes the program at the end of the file-reading.

datafile looks like this, with around 50000 rows:
Code:
   2        14.2000
   1        17.9000
   1        27.7000
   2        28.8000
   1        44.3500
   2        43.5000
   2        58.2500
   1        58.3500
   1        72.6700
   2        72.6500

The fortran code I have right now looks like:

Code:
      double precision datamatrix(200000,2)
      open(unit=9,file='data/test.dat')
      read(9,901) datamatrix
  901 format(F10.4,F10.4)

I think I'm in need of a command that finds how many rows are in the textfile

help please! Thanks!
 
Technology news on Phys.org
Look for an End of file (EOF) character.

My other suggestion is to use a while-loop...
 
Dr Transport said:
Look for an End of file (EOF) character.
eek, can someone offer further explanation?

Dr Transport said:
My other suggestion is to use a while-loop...
what should it be "while"ing for?


btw I'm using
gfortran
ubuntu 8.04

if anyone needed to know that...
 
Read() has an optional 3rd parameter. Since not all Fortran compilers have while loops I used goto:

Code:
      integer i,n

      i = 0
100   i = i+1
      read(9, 901, END=101) datamatrix[i,1],datamatrix[i,2]
901   format(F10.4,F10.4)
      goto 100

101   n = i

or

Code:
      integer i,n
      integer sts

      i = 0
100   i = i + 1
      read(9, 901, IOSTS=sts) datamatrix[i,1],datamatrix[i,2]
901   format(F10.4,F10.4)
      if(sts .NE. 0) goto 101
      goto 100

101   n = i
 
Last edited:
While loops will go until you reach the exit condition and are the preferred way to read a file where you don't know how long it is, which is what you indicated in the original post.

as pseudo code

while (not end of file)
read line into matrix
end of while

in C++ it looks like

Code:
while ( x < 10 ) { // While x is less than 10 
    cout<< x <<endl;
    x++;             // Update x so the condition can be met eventually
  }
 
Thanks all, I got it working. I was just missing the end= command.
 
I tried a web search "the loss of programming ", and found an article saying that all aspects of writing, developing, and testing software programs will one day all be handled through artificial intelligence. One must wonder then, who is responsible. WHO is responsible for any problems, bugs, deficiencies, or whatever malfunctions which the programs make their users endure? Things may work wrong however the "wrong" happens. AI needs to fix the problems for the users. Any way to...
Thread 'Star maps using Blender'
Blender just recently dropped a new version, 4.5(with 5.0 on the horizon), and within it was a new feature for which I immediately thought of a use for. The new feature was a .csv importer for Geometry nodes. Geometry nodes are a method of modelling that uses a node tree to create 3D models which offers more flexibility than straight modeling does. The .csv importer node allows you to bring in a .csv file and use the data in it to control aspects of your model. So for example, if you...

Similar threads

Replies
5
Views
5K
Replies
12
Views
3K
Replies
5
Views
2K
Replies
5
Views
3K
Replies
4
Views
2K
Replies
2
Views
2K
Replies
2
Views
2K
Back
Top