Fortran read from file problems

  • Fortran
  • Thread starter thomsonm
  • Start date
  • #1
13
0

Main Question or Discussion Point

I've been given a data file laid out as such:

heading1 heading2 heading3
x1 y1 z1
x2 y2 z2
x3 y3 z3
.etc.

where x=integer, y,z=real

I need to count the number of lines to allocate x, y and z their sizes. My first attempt looked like:

...

OPEN(21, FILE='data.dat', STATUS=OLD)

counter=1
ok=.FALSE.

DO WHILE (.NOT. ok)
READ(21,'\,1X,I1') first
counter=counter+1
IF (first .EQ. ' ') THEN

numberoflines=counter-1
ok=.TRUE.

ELSE CONTINUE

END IF

END DO

...

This runs into the problem that i don't know what type to make "first" as it'll be looking at integers until the last line.

If anyone can help it'd be much appreciated!
 

Answers and Replies

  • #2
jtbell
Mentor
15,553
3,507
Read the data as character data, then it will accept anything.

Also, the simplest way to detect the end of file is to specify an "iostat variable" to receive the status of the read statement. After the read statement, if the iostat variable is 0, the read was OK; if it's -1, you reached the end of file; otherwise there was some kind of input error.

Something like this (untested because I don't have a Fortran compiler handy):

Code:
      integer status, counter
      character*1 dummy

      status = 0
      counter = 0
      do while (status .eq. 0)
          read (21, '(1x, a1)', iostat=status) dummy
          if (status .eq. 0)
              counter = counter + 1
          end if
      end do

      if (status .eq. -1) then
          print *, 'The file has ', counter, ' lines.'
      else
          print *, 'There was an input error!  Status code = ', status
      end if
 
  • #3
13
0
That code worked like a charm, thanks!
 
  • #4
13
0


As the title suggests, theres more I'd like to ask:

I want to allow users to input a file name for the program to open:

...
CHARACTER*40 filename

...
OPEN(21,FILE=filename,STATUS='OLD')
...

Somehow this doesn't work, it just says the file doesn't exist. Any thoughts?
 
  • #5
jtbell
Mentor
15,553
3,507
The program may be looking for the file in a different directory (folder) than you're expecting. Have you tried using a full pathname?

Also, this may depend on the operating system, so it might be useful to tell us which OS you're using.
 
  • #6
13
0
After talking with some friends at uni we realised that it's just the IDE I was using that was the problem. (Silverfrost plato)

After using the universities software it works fine.

Thanks for the speedy response once again!
 

Related Threads on Fortran read from file problems

Replies
7
Views
1K
Replies
5
Views
17K
Replies
4
Views
10K
Replies
1
Views
15K
Replies
2
Views
29K
Replies
6
Views
8K
Replies
9
Views
18K
Replies
1
Views
7K
  • Last Post
Replies
2
Views
2K
Replies
20
Views
7K
Top