The following program reads an ASCII housekeeping IAM data file and stores the names and values in character arrays.
CHARACTER*(132) NAME ! name of ASCII housekeeping file
INTEGER LUN ! FORTRAN unit number to be used in
! reading the file
CHARACTER*132 BUFFER1 ! input buffer
CHARACTER*132 BUFFER2 ! input buffer
INTEGER ISTAT ! local status
INTEGER J ! loop counter
INTEGER NPARS ! number of parameters found
INTEGER NSTART ! start of a string
CHARACTER*(64) NAMES(256) ! entry names
CHARACTER*(64) VALUES(256) ! entry values
NAME = 'hkfile.ascii'
LUN = 1
NPARS = 0
OPEN ( FILE=NAME, UNIT=LUN, STATUS='OLD', IOSTAT=ISTAT )
IF ( ISTAT .EQ. 0 ) THEN
NPARS = 1
DO WHILE ( ( ISTAT .EQ. 0 ) .AND.
: ( NPARS .LE. 256 ) )
READ ( LUN, *, IOSTAT=ISTAT ) BUFFER1, BUFFER2
IF ( ISTAT .EQ. 0 ) THEN
IF ( BUFFER1 .NE. ' ' ) THEN
*
* Find start of parameter name
*
NSTART = 1
DO WHILE ( BUFFER1(NSTART:NSTART) .EQ. ' ' )
NSTART = NSTART + 1
ENDDO
NAMES(NPARS) = BUFFER1(NSTART:)
*
* Find start of parameter value
*
IF ( BUFFER2 .EQ. ' ' ) THEN
VALUES(NPARS) = ' '
ELSE
NSTART = 1
DO WHILE ( BUFFER2(NSTART:NSTART) .EQ. ' ' )
NSTART = NSTART + 1
ENDDO
VALUES(NPARS) = BUFFER2(NSTART:)
ENDIF
NPARS = NPARS + 1
ENDIF
ENDIF
ENDDO
NPARS = NPARS - 1
IF ( ISTAT .EQ. 0 ) THEN
PRINT *,
: 'warning - too many entries in hkfile'
ENDIF
CLOSE ( UNIT=LUN )
ELSE
PRINT *, 'failed to open file ', NAME
PRINT *, 'FORTRAN I/O error number was ', ISTAT
ENDIF
END