DreamCream
DreamCream

Reputation: 23

Reading missing data from a file

I have to read a file that contains numerical data (mostly reals) but there are also some missing data that are denoted by an asterisk(*). I don't know the positions of the asterisks in advance and I have to find the total valid (numerical) data and the total missing data (asterisks).

I tried doing this with a 'select case' nested in a do loop but failed because

  1. I can't use real type for the selector
  2. I don't think I can put the asterisks in a real matrix

The data file looks something like this

1    0.673070
2    0.750597
3    *
4    0.484100

Any suggestions?

Upvotes: 1

Views: 327

Answers (1)

Dan Sp.
Dan Sp.

Reputation: 1447

Assuming you know every line has either a real number or an *, I would do something like this:

Character(len=8) :: LineRead
Real :: RealNumber
open(42,file='MyFile.txt')

do (whichever kind of loop you need to control the input)
   read(42,'(a8)') LineRead
   if (LineRead <> '*       ')
     read(LineRead,'(f8.6)') RealNumber
     ! Increment some sort of valid data counter
   end if
end do

This technique is called reading from an internal file. Any character variable can be 'read' this way.

Upvotes: 1

Related Questions