WARNING: This example assumes spaces are ignored for the I and F descriptors and the output is sent to a printer. 
Suppose we have an input like the following. Each row starts with a salesperson's number (10 positions), followed by his/her phone numbers (10 positions), followed by the bonus this person has earned. Each salesperson's number has seven digits, the first two gives the division code, followed by two digits of department code, followed by three digits of person code. A phone number has seven digits in the form of 482-0911.
         1    1    2    2 
....5....0....5....0....5
7645094   7079173   1000
8745363   6347862   1120
8701001   7130067   750
4000023   6700175   1253
8801810   9000018   980
Write a Fortran program that reads in the above input and prints the
following table:
         1    1    2    2    3    3
....5....0....5....0....5....0....5
       Sales Amount Table
       ==================
 Sales No.   Phone No.   Amount
 ---------   ---------   ------
 76-45-094   707-9173      1000
 87-45-363   634-7862      1120
 87-01-001   713-0067       750
 40-00-023   670-0175      1253
 88-01-810   900-0018       980
 Total  5 person(s) processed.
Note that the first position is always for printer control.  Note also
that we do not know the number of salespersons.
PROGRAM  Decoding
   IMPLICIT  NONE
   CHARACTER(LEN=2)  :: SN_1, SN_2, SN_3*3
   CHARACTER(LEN=3)  :: Phone_1, Phone_2*4
   INTEGER           :: Amount
   INTEGER           :: Number
   INTEGER           :: Status
   LOGICAL           :: Problem
   CHARACTER(LEN=10) :: TitleFormat   = "(T8,A)"
   CHARACTER(LEN=10) :: HeadingFormat = "(T2,A)"
   CHARACTER(LEN=30) :: InputFormat   = "(A2,A2,A3,3X,A3,A4,3X,I5)"
   CHARACTER(LEN=30) :: OutputFormat  = "(1X, 5A, T14, 3A, T26,I6)"
   CHARACTER(LEN=30) :: LastLine      = "(1X, A, I3, A)"
   WRITE(*,TitleFormat)    "Sales Amount Table"
   WRITE(*,TitleFormat)    "=================="
   WRITE(*,*)
   WRITE(*,HeadingFormat)  "Sales No.   Phone No.   Amount"
   WRITE(*,HeadingFormat)  "---------   ---------   ------"
   Problem = .FALSE.
   Number = 0
   DO
      READ(*,InputFormat, IOSTAT=Status)  &
            SN_1, SN_2, SN_3, Phone_1, Phone_2, Amount
      IF (Status > 0) THEN
         WRITE(*,*)  "Something wrong in your input data"
         Problem = .TRUE.
         EXIT
      ELSE IF (Status < 0) THEN
         EXIT
      ELSE
         WRITE(*,OutputFormat)  &
               SN_1, "-", SN_2, "-", SN_3, Phone_1, "-", Phone_2, Amount
         Number = Number + 1
      END IF
   END DO
   IF (.NOT. Problem) THEN
      WRITE(*,*)
      WRITE(*,LastLine)  "Total", Number, " person(s) processed."
   END IF
END PROGRAM  Decoding
Click here to download this program.
         1    1    2    2    3    3 
....5....0....5....0....5....0....5
       Sales Amount Table
       ==================
 Sales No.   Phone No.   Amount
 ---------   ---------   ------
 76-45-094   707-9173      1000
 87-45-363   634-7862      1120
 87-01-001   713-0067       750
 40-00-023   670-0175      1253
 88-01-810   900-0018       980
 Total  5 person(s) processed.
         1    1    2    2    3    3 
....5....0....5....0....5....0....5
       Sales Amount Table
       ==================
                :
                :
                :
          The table heading "Sales Amount Table" starts at position
          8 and as a result we can use T8 to move there rather than
          adding spaces into the string.  Thus, we have a CHARACTER
          variable TitleFormat for this purpose:
CHARACTER(LEN=10) :: TitleFormat = "(T8,A)" WRITE(*,TitleFormat) "Sales Amount Table" WRITE(*,TitleFormat) "=================="
         1    1    2    2    3    3 
....5....0....5....0....5....0....5
 Sales No.   Phone No.   Amount
 ---------   ---------   ------
                :
                :
                :
          The following are the format and WRITE statements.  We
          have a CHARACTER variable to store the format in which
          T2 is used to move to position 2:
CHARACTER(LEN=10) :: HeadingFormat = "(T2,A)" WRITE(*,HeadingFormat) "Sales No. Phone No. Amount" WRITE(*,HeadingFormat) "--------- --------- ------"
CHARACTER(LEN=30) :: InputFormat   = "(A2,A2,A3,3X,A3,A4,3X,I5)"
READ(*,InputFormat, IOSTAT=Status)  &
      SN_1, SN_2, SN_3, Phone_1, Phone_2, Amount
     
         1    1    2    2    3    3 
....5....0....5....0....5....0....5
 76-45-094   707-9173      1000
 87-45-363   634-7862      1120
 87-01-001   713-0067       750
 40-00-023   670-0175      1253
 88-01-810   900-0018       980
          You can use T2 to move to position 2 or 1X to skip
          the first position.  The remaining two fields can be positioned 
          using T14 and T26.  The following is the format and
          the READ statement:
CHARACTER(LEN=30) :: OutputFormat  = "(1X, 5A, T14, 3A, T26,I6)"
WRITE(*,OutputFormat)  &
      SN_1, "-", SN_2, "-", SN_3, Phone_1, "-", Phone_2, Amount