For Programmers: Free Programming Magazines  


Home > Archive > Fortran > July 2004 > File Reading









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author File Reading
David Young

2004-07-29, 3:56 am

Hi, All!

This might be a newbie question but I don't know the solution. So
forgive me if it is too simple.

I am planning to read a file in Fortran (CVF 6.6), which contains both
text and numbers. It is looks like this:
# text 1
12 34 56
# text 2
# text 3
12 34
The number records in each line are known but the positions of the text,
which is supposed to be the comments, are not. I hope I made the problem
clear.
What I want to do is exam each line before I read in, if it begins with
"#", I will ignore it. Otherwise, I will re-read the line and get the
numbers out.
I know this can be done easily in c but I could not find a simple
solution using Fortran. I would really appreciate if somebody could
offer me a solution.

Thanks!
Paul Van Delst

2004-07-29, 3:56 am

David Young wrote:
> Hi, All!
>
> This might be a newbie question but I don't know the solution. So
> forgive me if it is too simple.
>
> I am planning to read a file in Fortran (CVF 6.6), which contains both
> text and numbers. It is looks like this:
> # text 1
> 12 34 56
> # text 2
> # text 3
> 12 34
> The number records in each line are known but the positions of the text,
> which is supposed to be the comments, are not. I hope I made the problem
> clear.
> What I want to do is exam each line before I read in, if it begins with
> "#", I will ignore it. Otherwise, I will re-read the line and get the
> numbers out.
> I know this can be done easily in c but I could not find a simple
> solution using Fortran. I would really appreciate if somebody could
> offer me a solution.


Sounds like a homework problem.

My approach to this sort of problem is to read each line into a character string "buffer",
examine the string for "#". If it's there, save the buffer string in a separate "comments"
string. If it's not, use an internal read to extract the numbers from the buffer string.

A variation on this would be to read the entire file line by line first to determine the
number of comment and data lines and then allocate arrays to the required size before
rewinding the file and reading them proper, like.

cheers,

paulv

Dr Ivan D. Reid

2004-07-29, 3:56 am

On Wed, 28 Jul 2004 14:31:43 -0500, David Young <davids9999@yahoo.com>
wrote in <ce8uur$eou$1@mozo.cc.purdue.edu>:
> I am planning to read a file in Fortran (CVF 6.6), which contains both
> text and numbers. It is looks like this:
> # text 1
> 12 34 56
> # text 2
> # text 3
> 12 34
> The number records in each line are known but the positions of the text,
> which is supposed to be the comments, are not. I hope I made the problem
> clear.
> What I want to do is exam each line before I read in, if it begins with
> "#", I will ignore it. Otherwise, I will re-read the line and get the
> numbers out.
> I know this can be done easily in c but I could not find a simple
> solution using Fortran. I would really appreciate if somebody could
> offer me a solution.


Standard way to do this is to read a line into a sufficiently-
large CHARACTER variable. Examine the string for signs of a comment and
loop to the next read if found. Then use an "iternal read" to read the
numbers from the string, and process them. Internal reads are the same
for most purposes as normal reads except you give the name of the
character variable instead of an I/O unit number:

read(mystring,'(3i6)')i,j,k

--
Ivan Reid, Electronic & Computer Engineering, ___ CMS Collaboration,
Brunel University. Ivan.Reid@brunel.ac.uk Room 40-1-B12, CERN
KotPT -- "for stupidity above and beyond the call of duty".
Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com