!********************************************************************** ! This file: http://ftp.aset.psu.edu/pub/ger/fortran/hdk/direct.f90 ! ROUTINE: DIRECT.F90 ! PURPOSE: To Demonstrate use of Fortran Direct Access. ! COMPILERS: Compaq CVF, Lahey LF95, and Salford FTN95, AIX XLF90 ! CONTACT: H. D. Knoble 03/11/91 !********************************************************************** ! !=======This program sequentially creates, then randomly reads and ! displays a random set of records. It will work with ! FORM='FORMATTED' and formatted WRITEs/READs or ! FORM='UNFORMATTED' and unformatted WRITEs/READs. ! CHARACTER*40 LINE CHARACTER*21 fileid INTEGER IREC(10), lrecl, numrec, I DATA fileid/'DIRECT.DAT'/ DATA lrecl/40/, numrec/15/ !--------IREC is the order (by record #) that records will be read. DATA IREC/9,8,7,6,5,4,3,2,1,15/ !--------See if the file exists. If not create it. WRITE(*,*) 'DIRECT FORTRAN Begin...' !--------Preformat. WRITE(*,*) 'Preformatting file:',fileid OPEN(UNIT=90,FORM='FORMATTED',FILE=fileid,STATUS='UNKNOWN', & ACCESS='DIRECT',RECL=lrecl) DO I=1,numrec WRITE(LINE,3) I 3 FORMAT('This is record number', I3) WRITE(90,'(A)',REC=I) LINE END DO CLOSE(UNIT=90) WRITE(*,*) 'Direct file is:',fileid WRITE(*,*) 'Direct access in "random" order...' WRITE(*,*) ' ' !--------Get the record length for this file. INQUIRE (FILE=fileid,RECL=lrecl) WRITE(*,*)'Record Length of DIRECT.DAT=',lrecl OPEN(UNIT=8, ACCESS='DIRECT', FILE=fileid, FORM='FORMATTED', & RECL=lrecl,STATUS='OLD') !--------Read 10 records "randomly" and display those records. DO I=1,10 READ(8,'(A)',REC=IREC(I)) LINE WRITE(*,5) IREC(I),LINE 5 FORMAT(' Record#',I4,'->',A40) END DO !--------Wrap up. WRITE(*,7) 7 FORMAT(/' ** DIRECT demo all done **') STOP END