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]
|
|
| 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".
|
|
|
|
|