Jump to content United States-English
HP.com Home Products and Services Support and Drivers Solutions How to Buy
» Contact HP
More options
HP.com home
HP Fortran 90 Programmer's Reference: HP Fortran 90 Programmer's Reference > Chapter 10 HP Fortran 90 statements

READ

» 

Technical documentation

Complete book in PDF
» Feedback
Content starts here

 » Table of Contents

 » Glossary

Inputs data from external and internal files.

Syntax

The syntax of the READ statement can take one of the following forms:

  • Long form (for use when reading from a connected file):

    READ (io-specifier-list) [input-list]
  • Short form (for use when reading from standard input):

    READ format [, input-list]
  • Short namelist-directed form (for use when reading from standard input into a namelist group):

    READ name
io-specifier-list

is a list of the following comma-separated I/O specifiers:

[UNIT=]unit

specifies the unit connected to the input file. unit can be one of the following:

  • The name of a character variable, indicating an internal file

  • An integer expression that evaluates to the unit connected to an external file

  • An asterisk, indicating a pre-connection to unit 5 (standard input)

If the optional keyword UNIT= is omitted, unit must be the first item in io-specifier-list.

[FMT=]format

specifies the format specification for formatting the data. format can be one of the following:

  • An asterisk (*), specifying list-directed I/O.

  • The label of a FORMAT statement containing the format specification.

  • An integer variable that has been assigned the label of a FORMAT statement.

  • A character expression that provides the format specification.

If the optional keyword FMT=is omitted, format must be the second item in io-specifier-list.

NOTE: The NML= and FMT= specifier may not both appear in the same
io-specifier-list
.
[NML=]name

specifies the name of a namelist group for namelist-directed input. name must have been defined in a NAMELIST statement. If the optional keyword NML= is omitted, name must be the second item in the list. The first item must be the unit specifier without the optional keyword UNIT=.

The NML= and FMT= specifier may not both appear in the same io-specifier-list.

ADVANCE=character-expression

specifies whether to use advancing I/O for this statement. character-expression can be one of the following arguments:

'YES'Use advancing formatted sequential I/O (default).
'NO'Use nonadvancing formatted sequential I/O.

If the ADVANCE= specifier appears in io-specifier-list, unit must be connected to an external file opened for formatted sequential I/O. Also, ADVANCE='NO' must be specified if the EOR= or SIZE= specifier appear in the list. Nonadvancing I/O is incompatible with list-directed and namelist I/O.

END=stmt-label

specifies the label of the executable statement to which control passes if an end-of-file record is encountered. This specifier is only valid for reading files opened for sequential access.

EOR=stmt-label

specifies the label of the executable statement to which control passes if an end-of-record condition is encountered. This specifier may appear in io-specifier-list only if ADVANCE='NO' also appears in the list.

IOSTAT=integer-variable

returns the I/O status after the statement executes. If the statement successfully executes, integer-variable is set to zero. If an end-of-file record is encountered without an error condition, it is set to a negative integer. If an error occurs, integer-variable is set to a positive integer that indicates which error occurred.

REC=integer-expression

specifies the number of the record to be read from a file connected for direct access. This specifier cannot appear in io-specifier-list with the NML=, ADVANCE=, SIZE=, and EOR= specifiers, nor with FMT=* (for list-directed I/O).

SIZE=integer-variable

returns the number of characters that have been read by this READ statement. This specifier may appear in io-specifier-list only if ADVANCE='NO' also appears in the list.

input-list

is a comma-separated list of data items for input. The data items can include variables and implied-DO lists.

format

is one of the following:

  • An asterisk (*), specifying list-directed I/O.

  • The label of a FORMAT statement containing the format specification.

  • An integer variable that has been assigned the label of a FORMAT statement.

  • An embedded format specification.

name

is the name of a namelist group, as previously defined by a NAMELIST statement. Using the namelist-directed syntax, the READ statement takes its input from standard input. To read from a connected file, you must use the NML= specifier with the full syntax form, as described below.

Description

The READ statement transfers data from an external or internal file to internal storage. An external file can be opened for sequential access or direct access. If it is opened for sequential access, the READ statement can perform the following types of I/O:

  • Formatted

  • Unformatted

  • List-directed

  • Namelist-directed

If the file is opened for direct access, the READ statement can perform formatted or unformatted I/O.

READ statements operating on internal files can perform formatted or list-directed I/O.

Examples

The following examples illustrate different uses of the READ statement.

Formatted sequential I/O

The following READ statement reads 10 formatted records from a file opened for sequential access, using an implied-DO list to read the data into the array x_array. If the end-of-file record is encountered before the array is filled, execution control passes to the statement at label 99.

READ (41, "(F10.2)", END=99) (x_array(i),i=1,10)

Nonadvancing I/O

The following READ statement takes its input from a file that was opened for sequential access and is connected to unit 9. It uses nonadvancing I/O to read an integer into the variable key. If the statement encounters the end-of-record condition before it can complete execution, control will pass to the executable statement at label 100. After the statement executes, the number of characters that have been read will be stored in cnt.

INTEGER :: key
READ (UNIT=9, "(I4)", ADVANCE="NO", SIZE=cnt, EOR=100) key

Internal file

The following statement inputs a string of characters from the internal file cfile, uses an embedded format specification to perform format conversion, and stores the results in the variables i and x:

READ (cfile, FMT="(I5, F10.5)") i, x

Namelist-directed I/O

Each of the four READ statements in the next example uses a different style of syntax to do exactly the same thing:

NAMELIST /nl/ a, b, c
READ (UNIT=5, NML=nl) ! 5 = standard input
READ (5, nl)
READ (*, NML=nl) ! * = standard input
READ nl ! assume standard input

List-directed I/O

The following statement takes its data from standard input, storing the converted value in int_var. The format conversion is based on the type of int_var.

READ *, int_var

If you knew the format, you could substitute for the asterisk one of the following:

  • The label of the FORMAT statement with the format specification, as in the following:

       READ 100, int_var
    100 FORMAT(I4)
  • An embedded format specification, as in the following:

       READ "(I4)", int_var

Unformatted direct-access I/O

The following statement takes its input from the file connected to unit 31. The REC= specifier indicates that the file has been opened for direct access and that this statement will read the record whose number is stored in the variable rec_num. If an I/O error occurs during the execution of the statement, an error number will be stored in ios, and execution control will branch to the executable statement at label 99.

READ (31, REC=rec_num, ERR=99, IOSTAT=ios) a, b

Related statements

CLOSE, OPEN, and WRITE.

Related concepts

For more about I/O concepts, including information about files and different types of I/O, see Chapter 8 “I/O and file handling”. This chapter also lists example programs that use I/O. For information about I/O formatting, see Chapter 9 “I/O formatting”.

Printable version
Privacy statement Using this site means you accept its terms Feedback to webmaster
© Hewlett-Packard Development Company, L.P.