WRITE statement

Standard: (F77) F90 F95 F2003 F2008 Example program


WRITE ( ci-spec [ , ci-spec ]... ) [ output-list ]

output-list ::= output-item [ , output-item ]...
output-item ::= expr | ( output-list , do-spec )

do-spec ::= variable-name = m1 , m2 [ , m3 ]
m1 ::= initial-scalar-integer-expr
m2 ::= final-scalar-integer-expr
m3 ::= step-scalar-integer-expr

The possible ci-specs are listed in the table below, together with their meaning.

The UNIT= ci-spec is required; the UNIT= keyword and equals sign may be omitted if it is the first ci-spec. If UNIT= was omitted, the FMT= keyword and equals sign may omitted if it is the second ci-spec, or the NML= keyword and equals sign may be omitted if it is the second ci-spec.


The WRITE statement writes one or more records, or partial records, to the specified unit. Each ci-spec is listed in the table below.

If unit is *, the output is to the standard output unit (usually the screen); if it is a character variable, the output is to that variable; if it is an integer expr, the output is to the external unit with that number, which must be non-negative.

If format is present, the WRITE is a formatted WRITE; if format is *, list-directed formatting is used; if format is a label, that FORMAT statement is used; if format is a character expression, that expression is interpreted as an explicit format. The WRITE is also a formatted WRITE if Namelist is present, in which case namelist formatting is used.

The form “( output-list , do-spec )” evaluates the output-list for each value of variable-name implied by the do-spec; for further details see the DO statement. Implied DO loops may be nested.

Specifier Argument Meaning Values
[ UNIT = ] unit Unit to write to
[ FMT = ] format Formatting
ADVANCE= Character Advancing input? 'YES', 'NO'
ASYNCHRONOUS= Character Async i/o? 'YES', 'NO'
DECIMAL= Character Decimal edit mode 'COMMA', 'POINT'
DELIM= Character Delimiter mode 'NONE', 'QUOTE', 'APOSTROPHE'
ERR= Label Branch on error
ID= Integer Pending i/o identifier
IOMSG= Character Error message
IOSTAT= Integer I/O status
[ NML= ] Namelist Namelist formatting
POS= Integer File storage position Positive
REC= Integer Record number Positive
SIGN= Character Sign edit mode 'PLUS', 'SUPPRESS', 'PROCESSOR_DEFINED'

The ADVANCE= specifier is only allowed for external files. If the [ NML= ] specifier appears, no format is allowed. The REC= specifier is only allowed for a direct access file.

In Fortran 2003, the DECIMAL=, DELIM=, ROUND= and SIGN= specifiers control the initial edit modes for that WRITE; if omitted, the default is taken from the OPEN. The IOMSG= specifier sets its variable to an error message if an error occurs. The POS= specifier is only allowed for stream files, and specifies the file storage position at which to start writing. The ID= specifier is only allowed in conjunction with ASYNCHRONOUS='YES', and sets the variable to an identifier for that asynchronous input/output (this variable can then be used in an ID= specifier in INQUIRE or WAIT).


ADVANCE= specifier, ASYNCHRONOUS= specifier, BACKSPACE statement, CLOSE statement, DECIMAL= specifier, DO statement, ENDFILE statement, ERR= specifier, FORMAT statement, ID= specifier, INQUIRE statement, IOMSG= specifier, IOSTAT= specifier, NAMELIST statement, NML= specifier, OPEN statement, PRINT statement, READ statement, REWIND statement, ROUND= specifier, SIGN= specifier