Parse Method
Class: _LIST_PARSER_1
Expand/Collapse source code of procedure Parse Source Code
      LPARAMETERS CHNGREF laFiles,INP loEngine
      EXTERNAL ARRAY laFiles
      LOCAL liEnd,lcData,lii,lcMonths,liMonth,lcRow,liAT,liy,liCnt,liz,lcPom,lnFileSize
      DIMENSION laFiles(100,7)
      liEnd=AT(CRLF,loEngine.cData,1)
      lii=0
      lcMonths=",jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec,"
      liCnt =OCCURS(",",lcMonths)-1

      DO WHILE liEnd>0
         lcData=LEFT(loEngine.cData,liEnd-1)
         loEngine.cData=SUBSTR(loEngine.cData,liEnd+2)
         liEnd=AT(CRLF,loEngine.cData,1)

         lii=lii+1
         IF lii>ALEN(laFiles,1)
            DIMENSION laFiles(lii+100,7)
         ENDIF            
         * Row processing
         laFiles(lii,1)=SUBSTR(lcData,1,10)
         laFiles(lii,2)=VAL(SUBSTR(lcData,12,3))

         * Check where is: "Mon Da HH:MM" or "Mon Da  YYYY"
         lcRow=LOWER(lcData)
         liAT=0
         FOR liy=1 TO liCnt
             liz=AT(",",lcMonths,liy)
             lcMonth=SUBSTR(lcMonths,liz+1,AT(",",lcMonths,liy+1)-liz-1)

             FOR liz=1 TO OCCURS(lcMonth,lcRow)
                 liAT=RAT(lcMonth,lcRow,liz)
                 IF liAT=0
                    LOOP
                 ENDIF
                 lcPom=SUBSTR(lcData,liAT) && datetime info
                 IF (SUBSTR(lcPom,4,1)=" " AND SUBSTR(lcPom,7,1)=" " AND VAL(SUBSTR(lcPom,5,2))>0 AND ;
                     VAL(SUBSTR(lcPom,8,2))>0 AND SUBSTR(lcPom,10,1)=":" AND VAL(SUBSTR(lcPom,11,2))>0) OR;
                    (SUBSTR(lcPom,4,1)=" " AND SUBSTR(lcPom,7,2)=" " AND VAL(SUBSTR(lcPom,5,2))>0 AND ;
                     VAL(SUBSTR(lcPom,9,4))>0)
                    EXIT
                 ENDIF
                 liAT=0
             NEXT
             IF liAT>0
                EXIT
             ENDIF
         NEXT
         IF liAT=0 && Fail at parsing file
            This.oFTP.SetExtendedError(_FTPS_UE_PLF,lcRow)
            RETURN .F.
         ENDIF
         laFiles(lii,6)=SUBSTR(lcData,liAT,12)
         liMonth=ATC(","+LEFT(laFiles(lii,6),3)+",",lcMonths)
         liMonth=OCCURS(",",LEFT(lcMonths,liMonth))

         IF AT(":",laFiles(lii,6))>0 && Time 
            laFiles(lii,6)=EVALUATE("{^"+STR(YEAR(DATE()))+"-"+;
                          LTRIM(STR(liMonth,2))+;
                          "-"+LTRIM(SUBSTR(laFiles(lii,6),5,2))+" "+SUBSTR(laFiles(lii,6),8,5)+":00}")
         ELSE
            laFiles(lii,6)=EVALUATE("{^"+SUBSTR(laFiles(lii,6),9,4)+"-"+;
                          LTRIM(STR(liMonth,2))+;
                          "-"+LTRIM(SUBSTR(laFiles(lii,6),5,2))+" 00:00:00}")
         ENDIF

         * File name
         laFiles(lii,7)=SUBSTR(lcData,liAT+13)

         * from 16. char to liAT-2 are three columns
         lcPom=ALLTRIM(SUBSTR(lcData,16,liAT-16-1))
         liy=AT(" ",lcPom)
         liz=RAT(" ",lcPom)
         laFiles(lii,3)=ALLTRIM(LEFT(lcPom,liy-1))      && Owner
         laFiles(lii,4)=ALLTRIM(SUBSTR(lcPom,liy+1,liz-1-liy))      && Group
         laFiles(lii,5)=VAL(SUBSTR(lcPom,liz+1)) && Size

         IF This.oFTP.GetFileSize(laFiles(lii,7),@lnFileSize)
            laFiles(lii,5)=lnFileSize
         ENDIF

      ENDDO
      IF lii>0 AND lii<>ALEN(laFiles,1)
         DIMENSION laFiles(lii,7)
      ENDIF
      RETURN llRet