character arrays in format tags (bug?)

Tobias Schlüter tobias.schlueter@physik.uni-muenchen.de
Tue Jan 29 13:54:00 GMT 2008


Brian Barnes wrote:
> I have a program which uses conditional format tags, similar to this 
> testcase which is taken from page 187 of Metcalf, Reid and Cohen's 
> Fortran 95/2003 explained:
> 
> ---
>       program testcase
>       integer :: ival(30),key,i
>       character(30) :: buffer
>       character(6) :: form2(3) = (/ '(30i1)', '(15i2)', '(10i3)' /)
> 
>       read (*, '(a30,i1)') buffer, key
>       read (buffer, form2 (key)) (ival(i), i=1,30/key)
> 
>       end
> ---
> 
> When compiled with -std=gnu  (gfortran 4.2.2, darwin8), no warning is 
> issued (which is good).  But when compiled with -std=f95 or -std=f2003, 
> the following error results:
> 
> ---
> nell:~/work/bit barnes$ gfortran -std=f95 testcase.f
> testcase.f:7.19:
> 
>       read (buffer, form2 (key)) (ival(i), i=1,30/key)
>                   1
> Error: Extension: Character array in FORMAT tag at (1)
> ---
> 
> Intel Fortran 10 gives no warning or error, at its "-warn all 
> -stand=f95" level.  Is this a gfortran bug or is the Metcalf example bad?

This is a bug, can you please file a bug report in 
http://gcc.gnu.org/bugzilla so that it doesn't get lost?

> As an aside, if anyone knows how to create a formatting string that does 
> something like:
> write(6,'(NUMI3)') variable(1:NUM)
> ...where NUM is an integer that is determined at runtime, I would love 
> to know how to write that code.  Right now I am enumerating the various 
> cases, which kind of sucks.  I tried a couple different ways to work the 
> integer variable into the format expression, with no luck.

You have two options: use a large enough number in the format string, 
or, if such a number doesn't exist, use an internal write to create the 
format string and then use that format string, say
charater*4 :: f
write(f, "(i2,'i3')") num
write(6, f) variable(1:num)

Cheers,
- Tobi



More information about the Fortran mailing list