http://www50.zippyshare.com/v/83838443/file.html
http://www50.zippyshare.com/v/40471505/file.html
I have two above input data files. They have similar number formats. I created following program with two subroutines (learning how to use subroutines), one will read out the name of input data file and number of rows, and the other will create an output file containing second column.
The program can do what I want with main.txt but not with test.text. Can anyone tell me reason what I am missing? Many thanks!
!This program will read single data file containing two columns and
!write output file containing second column and give the number of rows
PROGRAM rw_numrows_singlefile
IMPLICIT NONE
INTEGER::n
DOUBLE PRECISION,DIMENSION(11000000)::vdata, nvdata
!Not sure how to deal with unknown number of rows so choosing a bigger dimension.
CHARACTER (LEN=11)::seqfilein
seqfilein = 'main001.txt'
!DO seqnum = 1,2,1
!WRITE(seqfilein(5:7),'(I3.3)')seqnum
WRITE(*,*)seqfilein
CALL READDATA(vdata,n,seqfilein)
CALL WRITEDATA(vdata,n,nvdata,seqfilein)
END
!&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&a
SUBROUTINE READDATA(y,n,seqfname)
IMPLICIT NONE
INTEGER::i,ierr
REAL::xdummy
INTEGER,INTENT(OUT)::n
DOUBLE PRECISION,INTENT(INOUT),DIMENSION(11000000)::y
CHARACTER(LEN=11),INTENT(IN)::seqfname
ierr = 0
OPEN (UNIT=3, FILE=seqfname, STATUS='OLD', ACTION='READ', IOSTAT=ierr)
DO i = 1,huge(i)
READ (3,*,IOSTAT=ierr)xdummy,y(i)
if (ierr /=0) exit
END DO
CLOSE (UNIT = 3)
n = i-1
write(*,*) n
RETURN
END SUBROUTINE
!&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
SUBROUTINE WRITEDATA(vdata,n,nvdata,seqfileout)
IMPLICIT NONE
INTEGER::i,ierr
INTEGER,INTENT(IN)::n
DOUBLE PRECISION,INTENT(IN),DIMENSION(n)::vdata
DOUBLE PRECISION,INTENT(OUT),DIMENSION(n)::nvdata
CHARACTER(LEN=11),INTENT(IN)::seqfileout
CHARACTER(LEN=11)::seqfout
ierr = 0
seqfout = seqfileout(1:7)
OPEN (UNIT=12, FILE=trim(seqfout)//'.dat', STATUS='REPLACE', ACTION='WRITE', IOSTAT=ierr)
DO i = 1,n
nvdata(i) = vdata(i)
WRITE(12,'(F5.2)') nvdata(i)
ENDDO
CLOSE (UNIT = 12)
RETURN
END SUBROUTINE