You could try something like:
!This program will read a data file containing two columns and
!write an output data file containing a single column of interest.
PROGRAM readwrite
IMPLICIT NONE
INTEGER :: seqnum, nl, mn, nf
CHARACTER (LEN=11) :: seqfilein
!
mn = 0 ! max line length
nf = 0 ! number of valid files
DO seqnum = 1,999
WRITE (seqfilein,'(a,I3.3,a)') 'main',seqnum,'.txt'
CALL READ_WRITE_DATA (nl, seqfilein)
if (nl > 0) nf = nf+1
mn = max (mn, nl)
END DO
write (*,*) 'number of files',nf
write (*,*) 'longest file is',mn
END
!&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&a
SUBROUTINE READ_WRITE_DATA (nl, seqfname)
IMPLICIT NONE
INTEGER, INTENT(OUT) :: nl
CHARACTER (LEN=11), INTENT(IN) :: seqfname
!
INTEGER :: i,ierr
REAL*8 :: x, y
CHARACTER(LEN=11) :: seqfout
!
seqfout = seqfname(1:7)//'.dat'
OPEN (UNIT=11, FILE=seqfname, STATUS='OLD', ACTION='READ', IOSTAT=ierr)
if (IERR/=0) then
WRITE (*,*) ' ERROR OPENING ',seqfname
nl = -1
return
end if
!
OPEN (UNIT=12, FILE=seqfout, STATUS='REPLACE', ACTION='WRITE', IOSTAT=ierr)
if (IERR/=0) then
WRITE (*,*) ' ERROR OPENING ',seqfout
nl = -2
return
end if
!
DO i = 1, huge(i)
READ (11,*,IOSTAT=ierr) x, y
if (ierr /=0) exit
WRITE (12,'(F5.2)') y
END DO
nl = i-1
WRITE (*,*) seqfname,' has',nl,' lines'
CLOSE (UNIT = 11)
CLOSE (UNIT = 12)
END SUBROUTINE READ_WRITE_DATA
Updated with better error management