0

月の配列を比較して、各数値が奇数月か偶数月かを確認して、月//日//年.txt というラベルの付いたファイルを作成し、日付に一致する行を別のファイルからそれぞれの .txt ファイル。

出力は 90 個の .txt ファイルで、それぞれに APM_FORMATTED.txt の特定の日付に一致する行が含まれています。

PROGRAM APM_TEST
IMPLICIT NONE

INTEGER :: READSTATUS, YEAR_MIN, MONTH_MIN, DAY_MIN, YEAR_MAX, MONTH_MAX, DAY_MAX, I, IND, IND1, D, D1, D2 
CHARACTER(13) :: DATE_INPUT
CHARACTER(2) :: FILE_DAY, FILE_MONTH, FILE_YEAR, CURRENT_DAY, CURRENT_MONTH
CHARACTER(632) :: ROW1
INTEGER, DIMENSION(1,6) :: M
INTEGER, DIMENSION(1,6) :: N
INTEGER, DIMENSION(1,3) :: MON


WRITE(*,'(" ENTER DATE RANGE OF FILE (E.G. 010413-010713):")', ADVANCE = "NO")
        READINT : DO
            READ (*,*,IOSTAT=READSTATUS) DATE_INPUT
            IF (READSTATUS==0) THEN
            EXIT READINT
            ELSE
            WRITE(*,'(/"READ ERROR. PLEASE RE-INPUT:")')
            ENDIF
        ENDDO READINT

        READ(DATE_INPUT(5:6), '(I2)') YEAR_MIN 
        READ(DATE_INPUT(3:4), '(I2)') MONTH_MIN
        READ(DATE_INPUT(1:2), '(I2)') DAY_MIN
        READ(DATE_INPUT(12:13), '(I2)') YEAR_MAX
        READ(DATE_INPUT(10:11), '(I2)') MONTH_MAX
        READ(DATE_INPUT(8:9), '(I2)') DAY_MAX




        IND=1
        IND1=1
        M=(/1,3,5,7,9,11/)
        N=(/4,6,8,10,12/)

36      DO MON=MONTH_MIN, MONTH_MAX
            IF (ANY(M.EQ.MON(IND))) THEN

                DO D=DAY_MIN,31
                    FILE_DAY=DATE_INPUT(1:2)
                    FILE_MONTH=DATE_INPUT(3:4)
                    FILE_YEAR=DATE_INPUT(5:6)
                    OPEN(UNIT=201, FILE="APM_FORMATTED.TXT")
                    OPEN(IND1, FILE=(FILE_MONTH//FILE_DAY//FILE_YEAR//".TXT"), ACTION="WRITE", STATUS="NEW") 
45                  DO I=1,200000
                        READ(201,'(A632)') ROW1
                        IF (ROW1(1:3).EQ.'APM') THEN
                        READ(ROW1(41:42), '(I2)') CURRENT_DAY
                        READ(ROW1(43:44), '(I2)') CURRENT_MONTH

                            IF (CURRENT_MONTH.EQ.MON .AND. CURRENT_DAY.EQ.D) THEN 
                            WRITE(IND1,*) ROW1
                            ELSE
                            GOTO 45
                            ENDIF

                        ELSE 
                        ENDIF
                    ENDDO
                    IND1=IND1+1
                    CLOSE(IND1)
                    CLOSE(201)
                ENDDO

            ELSEIF (ANY(N.EQ.MON)) THEN

                DO D1=DAY_MIN,30
                    FILE_DAY=DATE_INPUT(1:2)
                    FILE_MONTH=DATE_INPUT(3:4)
                    FILE_YEAR=DATE_INPUT(5:6)
                    OPEN(UNIT=201, FILE="APM_FORMATTED.TXT")
                    OPEN(IND1, FILE=(FILE_MONTH//FILE_DAY//FILE_YEAR//".TXT"), ACTION="WRITE", STATUS="NEW") 
73                  DO I=1,200000
                        READ(201,'(A632)') ROW1
                        IF (ROW1(1:3).EQ.'APM') THEN
                        READ(ROW1(41:42), '(I2)') CURRENT_DAY
                        READ(ROW1(43:44), '(I2)') CURRENT_MONTH

                            IF (CURRENT_MONTH.EQ.MON .AND. CURRENT_DAY.EQ.D1) THEN 
                            WRITE(IND1,*) ROW1
                            ELSE
                            GOTO 73
                            ENDIF

                        ELSE
                        ENDIF
                    ENDDO
                    IND1=IND1+1
                    CLOSE(IND1)
                    CLOSE(201)
                ENDDO

            ELSEIF (ANY(M.EQ.4)) THEN 

                DO D2=DAY_MIN,28
                    FILE_DAY=DATE_INPUT(1:2)
                    FILE_MONTH=DATE_INPUT(3:4)
                    FILE_YEAR=DATE_INPUT(5:6)
                    OPEN(UNIT=201, FILE="APM_FORMATTED.TXT")
                    OPEN(IND1, FILE=(FILE_MONTH//FILE_DAY//FILE_YEAR//".TXT"), ACTION="WRITE", STATUS="NEW") 
101                 DO I=1,200000
                        READ(201,'(A632)') ROW1
                        IF (ROW1(1:3).EQ.'APM') THEN
                        READ(ROW1(41:42), '(I2)') CURRENT_DAY
                        READ(ROW1(43:44), '(I2)') CURRENT_MONTH

                            IF (CURRENT_MONTH.EQ.MON .AND. CURRENT_DAY.EQ.D2) THEN
                            WRITE(IND1,*) ROW1
                            ELSE
                            GOTO 101
                            ENDIF

                        ELSE
                        ENDIF

                    ENDDO
                    IND1=IND1+1
                    CLOSE(IND1)
                    CLOSE(201)
                ENDDO
            ELSE 
            GOTO 36
            ENDIF
            IND=IND+1
            DAY_MIN=1

    ENDDO

END PROGRAM APM_TEST

Errors:
error FOR2614: assignment between arrays of differing rank
error FOR2614: assignment between arrays of differing rank
error FOR2799: DO control variable MON is not scalar
error FOR2979: expected 2 subscripts but found 1 for array MON
error FOR3041: operands to relational operator .EQ. are of incompatible data type
error FOR3041: operands to relational operator .EQ. are of incompatible data type
error FOR3048: illegal data type to binary logical operator .AND. 
error FOR3156: array shapes differ in dimension 2 (extent 6 and 3)
error FOR3041: operands to relational operator .EQ. are of incompatible data type
error FOR3041: operands to relational operator .EQ. are of incompatible data type
error FOR3048: illegal data type to binary logical operator .AND. 
error FOR3041: operands to relational operator .EQ. are of incompatible data type
error FOR3041: operands to relational operator .EQ. are of incompatible data type
error FOR3048: illegal data type to binary logical operator .AND. 
4

1 に答える 1