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