SUBROUTINE WC_BKST ( report, lenr, ifile, flds, numfld, irptdt, + rptok, iret ) C************************************************************************ C* WC_BKST * C* * C* This subroutine breaks the report string into an array of fields. * C* Water Level (WL) report fields are separated by semicolon * C* characters and River Gauge (RG) report fields are separated by * C* comma characters. Any embedded blanks are also removed from * C* within each returned field. * C* * C* After the array fields are generated * C* the report date-time (local time) is extracted. * C* * C* WC_BKST ( REPORT, LENR, IFILE, FLDS, NUMFLD, IRPTDT, RPTOK, IRET ) * C* * C* Input parameters: * C* REPORT CHAR* Report string * C* LENR INTEGER Length of REPORT * C* IFILE INTEGER File number counter * C* * C* Output parameters: * C* FLDS (NUMFLD) CHAR* Array of fields * C* NUMFLD INTEGER Number of fields returned * C* IRPTDT INTEGER Array of report-time segments * C* RPTOK LOGICAL Report flag * C* IRET INTEGER Return code: * C* * C* 0 = normal return * C* 1 = more than MXFLDS fields * C* were present in REPORT * C** * C* Log: * C* M. Weiss/IMSG 10/20 Based on UG_BKST * C************************************************************************ INCLUDE 'GEMPRM.PRM' INCLUDE 'wccmn.cmn' C* CHARACTER*(*) report C* CHARACTER flds(MXFLDS)*16 CHARACTER*1 dlim C* LOGICAL endfld, rptok C* INTEGER irptdt(5) C------------------------------------------------------------------------ iret = 0 C C* Break the report into fields. C IF ( statyp(ifile) .eq. "WL" ) dlim = ";" IF ( statyp(ifile) .eq. "RG" ) dlim = "," mxlfld = 16 numfld = 0 ii = 1 DO jj = 1, MXFLDS flds (jj) = ' ' endfld = .false. lfld = 0 DO WHILE ( ( .not. endfld ) .and. ( ii .le. lenr ) ) IF ( report (ii:ii) .eq. dlim ) THEN endfld = .true. numfld = numfld + 1 ELSE IF ( ( report (ii:ii) .ne. CHSPAC ) .and. + ( lfld .lt. mxlfld ) ) THEN lfld = lfld + 1 flds (jj)(lfld:lfld) = report (ii:ii) END IF ii = ii + 1 END DO END DO C IF ( ii .le. lenr ) THEN iret = 1 ELSE numfld = numfld + 1 END IF C C* Extract the report date-time C SELECT CASE( statyp(ifile) ) CASE( "WL" ) ! .txt IF ( numfld .ne. 3 ) THEN ! NOT okay for .txt file WRITE ( UNIT = logmsg, FMT='(A,I2)' ) + 'Not 3 fields for .txt: numfld = ', numfld CALL DC_WLOG ( 2, 'UG', 2, logmsg(1:34), ierwlg ) ELSE CALL ST_INTG ( flds(1)(1:4), irptdt(1), iersi1) ! year CALL ST_INTG ( flds(1)(6:7), irptdt(2), iersi2) ! mnth CALL ST_INTG ( flds(1)(9:10), irptdt(3), iersi3)! day CALL ST_INTG ( flds(2)(1:2), irptdt(4), iersi4) ! hour CALL ST_INTG ( flds(2)(4:5), irptdt(5), iersi5) ! min IF ( ( iersi1 .ne. 0 ) .or. ( iersi2 .ne. 0 ) .or. + ( iersi3 .ne. 0 ) .or. ( iersi4 .ne. 0 ) .or. + ( iersi5 .ne. 0 ) ) THEN rptok = .false. END IF END IF CASE( "RG" ) ! .csv IF ( numfld .ne. 10 ) THEN ! NOT okay for .csv file WRITE ( UNIT = logmsg, FMT='(A,I2)' ) + 'Not 10 fields for .csv: numfld = ', numfld CALL DC_WLOG ( 2, 'UG', 2, logmsg(1:35), ierwlg ) ELSE CALL ST_INTG ( flds(2)(1:4), irptdt(1), iersi1) ! year CALL ST_INTG ( flds(2)(6:7), irptdt(2), iersi2) ! mnth CALL ST_INTG ( flds(2)(9:10), irptdt(3), iersi3)! day CALL ST_INTG ( flds(2)(12:13), irptdt(4), iersi4) ! hour CALL ST_INTG ( flds(2)(15:16), irptdt(5), iersi5) ! min IF ( ( iersi1 .ne. 0 ) .or. ( iersi2 .ne. 0 ) .or. + ( iersi3 .ne. 0 ) .or. ( iersi4 .ne. 0 ) .or. + ( iersi5 .ne. 0 ) ) THEN rptok = .false. END IF END IF END SELECT C* RETURN END