Фортран: чтение одного значения за раз из строки - PullRequest
1 голос
/ 27 сентября 2011

Я использую FORTRAN для чтения данных из текстового файла ASCII.Файл содержит несколько значений данных в строке, но число значений в строке не является постоянным.

101.5 201.6 21.4 2145.5
45.6 21.2
478.5
...

Обычно после оператора чтения Fortran переходит к следующей строке.То, что я хочу сделать, это читать одно значение данных за раз.Если он попадает в конец строки, он должен просто продолжить чтение на следующей строке.Возможно ли это?

1 Ответ

3 голосов
/ 28 сентября 2011

Как указал IRO-bot в своем комментарии к вашему вопросу, ответ уже дал М.С.Б. Ниже я просто предоставил код, иллюстрирующий этот ответ (поскольку пост М.С.Б. не содержал его):

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

При запуске этой программы с использованием строк пробы вы указали

101.5000    
201.6000    
21.40000    
2145.500    
45.60000    
21.20000    
478.5000

Надеюсь, вы найдете это полезным.

...