Changeset 187 for ccr/trunk/p/CCRUTIL.m
- Timestamp:
- Oct 6, 2008, 7:33:38 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
ccr/trunk/p/CCRUTIL.m
r149 r187 58 58 N VSRT ; TEMP FOR HASHING DATES 59 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 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 91 79 Q ZCNT 92 80 ; 93 SORTDT2(V1,V2,ORDR) ; REWRITE TO USE 3 INSTEAD OF 2 LVLS OF INDEX94 ; AND $Q INSTEAD OF $O95 ; DATE SORT ARRAY AND RETURN INDEX IN V1 AND COUNT96 ; AS EXTRINSIC ORDR IS 1 OR -1 FOR FORWARD OR REVERSE97 ; DATE AND TIME ORDER. DEFAULT IS FORWARD98 ; V2 IS AN ARRAY OF DATES IN FILEMAN FORMAT99 ; V1 IS RETURNS INDIRECT INDEXES OF V2 IN REVERSE DATE ORDER100 ; SO V2(V1(X)) WILL RETURN THE DATES IN DATE/TIME ORDER101 ; THE COUNT OF THE DATES IS RETURNED AS AN EXTRINSIC102 ; BOTH V1 AND V2 ARE PASSED BY REFERENCE103 N VSRT ; TEMP FOR HASHING DATES104 N ZI,ZJ,ZTMP,ZCNT,ZP1,ZP2105 S ZCNT=0 ; COUNTING NUMBER OF DATES106 S ZTMP="" ;107 F ZI=0:0 D Q:$O(V2(ZTMP))="" ; FOR EACH DATE IN THE ARRAY108 . S ZCNT=ZCNT+1 ; INCREMENT THE COUNT109 . S ZTMP=$O(V2(ZTMP)) ; NEXT DATE110 . I $D(V2(ZTMP)) D ; IF THE DATE EXISTS111 . . S ZP1=$P(V2(ZTMP),".",1) ; THE DATE PIECE112 . . S ZP2=$P(V2(ZTMP),".",2) ; THE TIME PIECE113 . . S VSRT(ZP1,ZP2,ZCNT)=ZCNT ; HASH ON DATE AND TIME114 . I DEBUG W "ZTMP=",ZTMP," "115 S V1(0)=ZCNT ; ARRAYS ARE THE SAME SIZE116 ; I DEBUG ZWR V2117 ; I DEBUG ZWR VSRT118 N ZD,ZT ; DATA AND TIME ITERATORS119 N ZDONE ; DONE FLAG120 S (ZD,ZT)=""121 S ZDONE=0122 N UORDR ; ORDER TO USE 1=FORWARD -1=REVERSE123 S UORDR=ORDR ; DIRECTION TO SORT124 I ORDR="" S UORDR=1125 N ZZCNT S ZZCNT=0 ; ANOTHER COUNTER126 F ZI=0:0 D Q:ZDONE ; VISIT THE ARRAY IN DATE ORDER127 . S ZD=$O(VSRT(ZD),UORDR) ; NEXT DATE fix this128 . I ZD="" S ZDONE=1129 . I 'ZDONE D ; MORE DATES130 . . S ZT="" ; WANT FIRST TIME FOR THIS DATE131 . . F ZJ=0:0 D Q:$O(VSRT(ZD,ZT),UORDR)="" ; LOOP THROUGH ALL TIMES132 . . . S ZT=$O(VSRT(ZD,ZT),UORDR) ; NEXT TIME133 . . . S ZZCNT=ZZCNT+1 ; INCREMENT COUNTER134 . . . S V1(ZZCNT)=VSRT(ZD,ZT) ; PULL OUT THE INDEX135 Q ZCNT136 ;
Note:
See TracChangeset
for help on using the changeset viewer.