In a data transfer statement, a simple list of items takes the following form:
The variable must not be an assumed-size array, unless one of the following appears in the last dimension: a subscript, a vector subscript, or a section subscript specifying an upper bound.
Any expression must not attempt further I/O operations on the same logical unit. For example, it must not refer to a function subprogram that performs I/O on the same logical unit.
The data transfer statement assigns values to (or transfers values from) the list items in the order in which the items appear, from left to right.
When multiple array names are used in the I/O list of an unformatted input or output statement, only one record is read or written, regardless of how many array name references appear in the list.
Examples
The following example shows a simple I/O list:
  WRITE (6,10) J, K(3), 4, (L+4)/2, N
Data transfer begins with the initial item of the array and proceeds in the order of subscript progression, with the leftmost subscript varying most rapidly. The following statement defines a two-dimensional array:
  DIMENSION ARRAY(3,3)
An input record contains the following values:
  1,3,721.73
  DIMENSION ARRAY(3,3)
  ...
  READ (1,30) J, K, ARRAY(J,K)
Consider the following derived-type definition and structure declaration:
  TYPE EMPLOYEE
    INTEGER ID
    CHARACTER(LEN=40) NAME
  END TYPE EMPLOYEE
  ...
  TYPE(EMPLOYEE) :: CONTRACT   ! A structure of type EMPLOYEE
  READ *, CONTRACT
  READ *, CONTRACT%ID, CONTRACT%NAME
For More Information:
For details on the general rules for I/O lists, see Section 10.2.2.