Reading comment lines correctly in an input file using Fortran 90
comments, file-io, fortran, gfortran
Solution
Fortran doesn't automatically skip comments lines in input files. You can do this easily enough by first reading the line into a string, checking the first character for your comment symbol or search the string for that symbol, then if the line is not a comment, doing an "internal read" of the string to obtain the numeric value.
Something like:
use, intrinsic :: iso_fortran_env
character (len=200) :: line
integer :: dat1, RetCode
read_loop: do
read (1, '(A)', isostat=RetCode) line
if ( RetCode == iostat_end) exit ReadLoop
if ( RetCode /= 0 ) then
... read error
exit read_loop
end if
if ( index (line, "*") /= 0 ) cycle read_loop
read (line, *) dat1
end do read_loop
Problem
It is my understanding that Fortran, when reading data from file, will skip lines starting with and asterisk (*) assuming that they are a comment. Well, I seem to be having a problem with achieving this behavior with a very simple program I created. This is my simple Fortran program: ``` 1 program test 2 3 integer dat1 4 5 open(unit=1,file="file.inp") 6 7 read(1,*) dat1 8 9 10 end program test ``` This is "file.inp": ``` 1 *Hello 2 1 ``` I built my simple program with ``` gfortran -g -o test test.f90 ``` When I run, I get the error: ``` At line 7 of file test.f90 (unit = 1, file = 'file.inp') Fortran runtime error: Bad integer for item 1 in list input ``` When I run the input file with the comment line deleted, i.e.: ``` 1 1 ``` The code runs fine. So it seems to be a problem with Fortran correctly interpreting that comment line. It must be something exceedingly simple I'm missing here, but I can't turn up anything on google.