Alberto Fasso' said:
> "I called the NAg support, they said the FORTRAN standard requires a
> comma between a scale factor and a repeat count and most compilers are
> more relax on this rule"
>
> A colleague of mine insists that the standard does not require a comma.
Quoting from the (F90) standard, in 10.1.1 we have
"The comma used to separate <format-item>s in a <format-item-list> may be
omitted as follows:
(1) Between a P edit descriptor and an immediately following F, E, EN, ES,
D, or G edit descriptor"
The repeat count is *NOT* part of the data edit descriptor; 10.2 defines a
<format-item> thusly:
"R1003 <format-item> <<is>> [ r ] <data-edit-desc>"
note that the optional repeat spec [ r ] is not part of the data edit
descriptor. This is confirmed by 10.2.1 which defines data edit
descriptors - 10.2.1 also does not include the repeat spec as part of
the data edit descriptor.
> Who is right? And is the rule the same for F77 and F90?
I've appended the "official answer" to this very question from X3J3 and
WG5.
The rule is the same in F77, only the wording is somewhat grungier.
The rule remains in F95. And in the F2000 draft.
The NAG compiler will accept code with the missing comma (in FORMAT
statements only) if you give it the "-dusty" option.
Cheers,
--
...........................Malcolm Cohen, NAG Ltd., Oxford, U.K.
([log in to unmask])
P.S. Interpretation request 50 on Fortran 90.
--------------------------------------------------------------------------------
NUMBER: 000050
TITLE: Repeat counts on edit descriptors
KEYWORDS: i/o edit descriptor, i/o repeat count in format-directed
DEFECT TYPE: Interpretation
STATUS: Published
QUESTION: Is the repeat specification part of the edit descriptor?
In section 10.1.1 the second constraint states that the comma separating the
<format-items> in a <format-item-list> is optional between certain combinations
of edit descriptors.
In section 10.2 a format-item is defined as, amongst other things,
"[r]<data-edit-desc>" and in 10.2.1 an edit-descriptor can be a data-edit-desc.
However, <data-edit-desc> does not contain the repeat count. This implies that:
100 FORMAT(1PE20.10) ! is legal
200 FORMAT(1P3E20.10) ! is not legal
300 FORMAT(1P,3E20.10) ! is legal
ANSWER: The repeat count is not part of any edit descriptor except the
"[r]/" edit descriptor.
The comments in the examples are correct.
Discussion: This problem appears to stem from an incompatibility between FORTRAN
66 and FORTRAN 77. In FORTRAN 66 a FORMAT statement is of the form:
FORMAT(list)
where the list consists of a series of field descriptors separated by field
separators and optionally preceded and succeeded by slashes. The field
descriptors for real or double precision values consisted of the now familiar
Dw.d, Ew.d, Fw.d, and Gw.d edit descriptors (a term introduced in FORTRAN 77)
preceded by an optional scale factor and repeat count. For example, in FORTRAN
66 a valid field descriptor is 1P3E17.10, where 1P is the scale factor, 3 the
repeat count for a field containing 10 digits in the fractional part of the
number and having a E exponent.
In FORTRAN 77 the scale factor is an edit descriptor and thus is a list element
in the format specification. While FORTRAN 77 specifies places where the commas
separating list elements in a format specification are optional, it fails to
make a comma between the scale factor and an immediately succeeding repeated D,
E, F, or G edit descriptor optional. This situation has been carried over to
Fortran 90. Thus:
100 FORMAT(1PE20.10) ! is legal in F66, F77, and F90
200 FORMAT(1P3E20.10) ! is legal in F66, and illegal in F77 & F90
300 FORMAT(1P,3E20.10) ! is illegal in F66, and legal in F77 & F90
EDITS: None.
SUBMITTED BY: A.D. Tait, X3J3/92-041 (121-ADT-1)
HISTORY: X3J3/92-041
X3J3/92-042
X3J3/92-267r m123 Edit approved
N881 WG5 approval
--------------------------------------------------------------------------------
|