Reputation: 23
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
The data file looks something like this
1 0.673070
2 0.750597
3 *
4 0.484100
Any suggestions?
Upvotes: 1
Views: 327
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