PROGRAM ch2003
IMPLICIT NONE
TYPE Address
  CHARACTER (LEN=60)  :: Street
  CHARACTER (LEN=60)  :: District
  CHARACTER (LEN=60)  :: City
  CHARACTER (LEN=8 )  :: Post_Code
END TYPE Address
TYPE Date_Of_Birth
  INTEGER :: Day
  INTEGER :: Month
  INTEGER :: Year
END TYPE Date_Of_Birth
TYPE Personal
  CHARACTER (LEN=20)   :: First_Name
  CHARACTER (LEN=20)   :: Other_Names
  CHARACTER (LEN=40)   :: Surname
  TYPE (Date_Of_Birth) :: DOB
  CHARACTER (LEN=1)    :: Sex
  TYPE (Address)       :: Addr
END TYPE Personal
INTEGER , PARAMETER :: N_People=2
TYPE (Personal) , DIMENSION(N_People) :: P
INTEGER :: I
  OPEN(UNIT=1,FILE='PERSON.DAT')
  DO I=1,N_People
    READ(1,FMT=10)  P(I)%First_Name,&
              P(I)%Other_Names,&
              P(I)%Surname,&
              P(I)%DOB%Day,&
              P(I)%DOB%Month,&
              P(I)%DOB%Year,&
              P(I)%Sex,&
              P(I)%Addr%Street,&
              P(I)%Addr%District,&
              P(I)%Addr%City,&
    P(I)%Addr%Post_Code 
    10 FORMAT(  A20,/,&
            A20,/,&
            A40,/,&
            I2,1X,I2,1X,I4,/,&
            A1,/,&
            A60,/,&
            A60,/,&
            A60,/,&
            A8)
  END DO
  DO I=1,N_People
    WRITE(*,FMT=20)  P(I)%First_Name,&
                P(I)%Other_Names,&
                P(I)%Surname,&
                P(I)%DOB%Day,&
                 P(I)%DOB%Month,&
                P(I)%DOB%Year,&
                P(I)%Sex,&
                P(I)%Addr%Street,&
                P(I)%Addr%District,&
                P(I)%Addr%City,&
                P(I)%Addr%Post_Code
    20 FORMAT(      A20,A20,A40,/,& 
                I2,1X,I2,1X,I4,/,& 
                A1,/,& 
                A60,/,& 
                A60,/,& 
                A60,/,& 
                A8)
  END DO
END PROGRAM ch2003

