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


Ignore:
Timestamp:
Oct 6, 2008, 7:33:38 PM (16 years ago)
Author:
George Lilly
Message:

rewrote Date sort routine to fix Vitals bug. debugging meds.

File:
1 edited

Legend:

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

    r149 r187  
    5858 N VSRT ; TEMP FOR HASHING DATES
    5959 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
     60 S ZCNT=V2(0) ; COUNTING NUMBER OF DATES
     61 F ZI=1:1:ZCNT D  ; FOR EACH DATE IN THE ARRAY
     62 . I $D(V2(ZI)) D  ; IF THE DATE EXISTS
     63 . . S ZP1=$P(V2(ZI),".",1) ; THE DATE PIECE
     64 . . S ZP2=$P(V2(ZI),".",2) ; THE TIME PIECE
     65 . . ; W "DATE: ",ZP1," TIME: ",ZP2,!
     66 . . S VSRT(ZP1,ZP2,ZI)=ZI ; INDEX OF DATE, TIME AND COUNT
     67 N ZG
     68 S ZG=$Q(VSRT(""))
     69 F  D  Q:ZG=""  ;
     70 . ; W ZG,!
     71 . D PUSH^GPLXPATH("V1",@ZG)
     72 . S ZG=$Q(@ZG)
     73 I ORDR=-1 D  ; HAVE TO REVERSE ORDER
     74 . N ZG2
     75 . F ZI=1:1:V1(0) D  ; FOR EACH ELELMENT
     76 . . S ZG2(V1(0)-ZI+1)=V1(ZI) ; SET IN REVERSE ORDER
     77 . S ZG2(0)=V1(0)
     78 . D CP^GPLXPATH("ZG2","V1") ; COPY OVER THE NEW ARRAY
    9179 Q ZCNT
    9280 ;
    93 SORTDT2(V1,V2,ORDR) ; REWRITE TO USE 3 INSTEAD OF 2 LVLS OF INDEX
    94  ; AND $Q INSTEAD OF $O
    95  ; DATE SORT ARRAY AND RETURN INDEX IN V1 AND COUNT
    96  ; AS EXTRINSIC ORDR IS 1 OR -1 FOR FORWARD OR REVERSE
    97  ; DATE AND TIME ORDER. DEFAULT IS FORWARD
    98  ; V2 IS AN ARRAY OF DATES IN FILEMAN FORMAT
    99  ; V1 IS RETURNS INDIRECT INDEXES OF V2 IN REVERSE DATE ORDER
    100  ; SO V2(V1(X)) WILL RETURN THE DATES IN DATE/TIME ORDER
    101  ; THE COUNT OF THE DATES IS RETURNED AS AN EXTRINSIC
    102  ; BOTH V1 AND V2 ARE PASSED BY REFERENCE
    103  N VSRT ; TEMP FOR HASHING DATES
    104  N ZI,ZJ,ZTMP,ZCNT,ZP1,ZP2
    105  S ZCNT=0 ; COUNTING NUMBER OF DATES
    106  S ZTMP="" ;
    107  F ZI=0:0 D  Q:$O(V2(ZTMP))=""  ; FOR EACH DATE IN THE ARRAY
    108  . S ZCNT=ZCNT+1 ; INCREMENT THE COUNT
    109  . S ZTMP=$O(V2(ZTMP)) ; NEXT DATE
    110  . I $D(V2(ZTMP)) D  ; IF THE DATE EXISTS
    111  . . S ZP1=$P(V2(ZTMP),".",1) ; THE DATE PIECE
    112  . . S ZP2=$P(V2(ZTMP),".",2) ; THE TIME PIECE
    113  . . S VSRT(ZP1,ZP2,ZCNT)=ZCNT ; HASH ON DATE AND TIME
    114  . I DEBUG W "ZTMP=",ZTMP," "
    115  S V1(0)=ZCNT ; ARRAYS ARE THE SAME SIZE
    116  ; I DEBUG ZWR V2
    117  ; I DEBUG ZWR VSRT
    118  N ZD,ZT ; DATA AND TIME ITERATORS
    119  N ZDONE ; DONE FLAG
    120  S (ZD,ZT)=""
    121  S ZDONE=0
    122  N UORDR ; ORDER TO USE 1=FORWARD -1=REVERSE
    123  S UORDR=ORDR ; DIRECTION TO SORT
    124  I ORDR="" S UORDR=1
    125  N ZZCNT S ZZCNT=0 ; ANOTHER COUNTER
    126  F ZI=0:0 D  Q:ZDONE  ; VISIT THE ARRAY IN DATE ORDER
    127  . S ZD=$O(VSRT(ZD),UORDR) ; NEXT DATE fix this
    128  . I ZD="" S ZDONE=1
    129  . I 'ZDONE D  ; MORE DATES
    130  . . S ZT="" ; WANT FIRST TIME FOR THIS DATE
    131  . . F ZJ=0:0 D  Q:$O(VSRT(ZD,ZT),UORDR)=""  ; LOOP THROUGH ALL TIMES
    132  . . . S ZT=$O(VSRT(ZD,ZT),UORDR) ; NEXT TIME
    133  . . . S ZZCNT=ZZCNT+1 ; INCREMENT COUNTER
    134  . . . S V1(ZZCNT)=VSRT(ZD,ZT) ; PULL OUT THE INDEX
    135  Q ZCNT
    136  ;
Note: See TracChangeset for help on using the changeset viewer.