Changeset 121 for ccr/trunk/p/CCRUTIL.m


Ignore:
Timestamp:
Aug 30, 2008, 1:29:46 PM (16 years ago)
Author:
George Lilly
Message:

XINDEX fixes, and generalized Date sort utility for Vitals SORTDTCCRUTIL

File:
1 edited

Legend:

Unmodified
Added
Removed
  • ccr/trunk/p/CCRUTIL.m

    r120 r121  
    1818 ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
    1919    ;
    20           W "No Entry at Top!" Q
    21 
     20          W "No Entry at Top!"
     21          Q
     22          ;
    2223FMDTOUTC(DATE,FORMAT) ; Convert Fileman Date to UTC Date Format; PUBLIC; Extrinsic
    2324          ; FORMAT is Format of Date. Can be either D (Day) or DT (Date and Time)
     
    4748          E  Q $P(UTC,"T")
    4849          ;
     50SORTDT(V1,V2,ORDR) ; DATE SORT ARRAY AND RETURN INDEX IN V1 AND COUNT
     51               ; AS EXTRINSIC ORDR IS 1 OR -1 FOR FORWARD OR REVERSE
     52               ; DATE AND TIME ORDER. DEFAULT IS FORWARD
     53               ; V2 IS AN ARRAY OF DATES IN FILEMAN FORMAT
     54               ; V1 IS RETURNS INDIRECT INDEXES OF V2 IN REVERSE DATE ORDER
     55               ; SO V2(V1(X)) WILL RETURN THE DATES IN DATE/TIME ORDER
     56               ; THE COUNT OF THE DATES IS RETURNED AS AN EXTRINSIC
     57               ; BOTH V1 AND V2 ARE PASSED BY REFERENCE
     58          N VSRT ; TEMP FOR HASHING DATES
     59          N ZI,ZJ,ZTMP,ZCNT,ZP1,ZP2
     60          S ZCNT=0 ; COUNTING NUMBER OF DATES
     61          S ZTMP="" ;
     62          F ZI=0:0 D  Q:$O(V2(ZTMP))=""  ; FOR EACH DATE IN THE ARRAY
     63          . S ZCNT=ZCNT+1 ; INCREMENT THE COUNT
     64          . S ZTMP=$O(V2(ZTMP)) ; NEXT DATE
     65          . I $D(V2(ZTMP)) D  ; IF THE DATE EXISTS
     66          . . S ZP1=$P(V2(ZTMP),".",1) ; THE DATE PIECE
     67          . . S ZP2=$P(V2(ZTMP),".",2) ; THE TIME PIECE
     68          . . S VSRT(ZP1,ZP2_"00000"_ZCNT)=ZCNT ; HASH ON DATE AND TIME
     69          . . ; S VSRT($P(V2(ZTMP),U,4)_"000000"_ZCNT)=ZCNT ; PULL DATE
     70          . I DEBUG W "ZTMP=",ZTMP," "
     71          S V1(0)=ZCNT ; ARRAYS ARE THE SAME SIZE
     72          I DEBUG ZWR V2
     73          I DEBUG ZWR VSRT
     74          N ZD,ZT ; DATA AND TIME ITERATORS
     75          N ZDONE ; DONE FLAG
     76          S (ZD,ZT)=""
     77          S ZDONE=0
     78          N UORDR ; ORDER TO USE 1=FORWARD -1=REVERSE
     79          S UORDR=ORDR ; DIRECTION TO SORT
     80          I ORDR="" S UORDR=1
     81          N ZZCNT S ZZCNT=0 ; ANOTHER COUNTER
     82          F ZI=0:0 D  Q:ZDONE  ; VISIT THE ARRAY IN DATE ORDER
     83          . S ZD=$O(VSRT(ZD),UORDR) ; NEXT DATE
     84          . I ZD="" S ZDONE=1
     85          . I 'ZDONE D  ; MORE DATES
     86          . . S ZT="" ; WANT FIRST TIME FOR THIS DATE
     87          . . F ZJ=0:0 D  Q:$O(VSRT(ZD,ZT),UORDR)=""  ; LOOP THROUGH ALL TIMES
     88          . . . S ZT=$O(VSRT(ZD,ZT),UORDR) ; NEXT TIME
     89          . . . S ZZCNT=ZZCNT+1 ; INCREMENT COUNTER
     90          . . . S V1(ZZCNT)=VSRT(ZD,ZT) ; PULL OUT THE INDEX
     91          Q ZCNT
     92          ;
Note: See TracChangeset for help on using the changeset viewer.