Reading formatted data

FORMAT qualifier

!FORMAT s on the datafile line supplies a Fortran like FORMAT statement for reading fixed format files. A simple example is
!FORMAT(3I4,5F6.2)
which reads 3 integer fields and 5 floating point fields from the first 42 characters of each data line. A format statement is enclosed in parentheses and may include 1 level of nested parentheses, for example, e.g.
!FORMAT(4x,3(I4,f8.2))
Field descriptors, where is an optional repeat count, are
      to skip r character positions,
      Aw  to define r consecutive fields of w characters width,
      Iw to define r consecutive fields of w characters width, and
      Fw.d to define r consecutive fields of w characters width; d indicates where to insert the decimal point if it is not explicitly present in the field,

In ASReml, the A and I field descriptors are treated identically and simply set the field width. Whether the field is interpreted alphabetically or as a number is controlled by the !A qualifier.

Other legal components of a format statement are
      the , character; required to separate fields - blanks are not permitted in the format.
      the / character; indicates the next field is to be read from the next line. However a / on the end of a format to skip a line is not honoured.
      BZ ; the default action is to read blank fields as missing values. * and NA are also honoured as missing values. If you wish to read blank fields as zeros, include the string BZ .
      the string BM ; switches back to 'blank missing' mode.
      the string Tc ; moves the 'last character read' pointer to line position c so that the next field starts at position c+1. For example T0 goes back to the beginning of the line.
      the string D ; invokes debug mode.

A format showing these components is
!FORMAT(D,3I4,8X,A6,3(2x,F5.2)/4x,BZ,20I1) and is suitable for reading 27 fields from 2 data records such as \\
 111122223333xxxxxxxxALPHAFxx 4.12xx 5.32xx 6.32
 xxxx123 567 901 345 7890

Return to start