Flux Capacitor
Flux Capacitor

Reputation: 1231

Fortran: Read one value at a time from a line

I am using FORTRAN to read in data from an ASCII text file. The file contains multiple data values per line but the number of values per line is not constant.

101.5 201.6 21.4 2145.5
45.6 21.2
478.5
...

Normally after a read statement, Fortran would go to the next line. What I want to be able to do is read one data value at a time. If it hits the end of the line, it should just continue reading on the next line. Is this possible?

Upvotes: 2

Views: 6779

Answers (1)

canavanin
canavanin

Reputation: 2719

As pointed out by IRO-bot in their comment to your question, the answer has already been given by M.S.B. Below I have merely provided some code illustrating that answer (as M.S.B.'s post contained none):

program test

   character(len=40) :: line
   integer           :: success, i, indx, prev, beginning
   real              :: value

   open(1,file='test.txt')

   do  
      read(1,'(A)',iostat=success) line
      if (success.ne.0) exit

      prev      = 1 
      beginning = 1 

      do i=1,len(line)

         ! is the current character one out of the desired set? (if you
         ! have got negative numbers as well, don't forget to add a '-')
         indx = index('0123456789.', line(i:i))

         ! store value when you have reached a blank (or any other 
         ! non-real number character)
         if (indx.eq.0 .and. prev.gt.0) then
            read(line(beginning:i-1), *) value
            print *, value
         else if (indx.gt.0 .and. prev.eq.0) then
            beginning = i 
         end if

         prev = indx
      end do
   end do

   close(1)

end program test

When running this program using the sample lines you provided the output is

101.5000    
201.6000    
21.40000    
2145.500    
45.60000    
21.20000    
478.5000

I hope you will find this helpful.

Upvotes: 4

Related Questions