Changeset 121 for ccr/trunk/p/CCRUTIL.m
- Timestamp:
- Aug 30, 2008, 1:29:46 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
ccr/trunk/p/CCRUTIL.m
r120 r121 18 18 ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19 19 ; 20 W "No Entry at Top!" Q 21 20 W "No Entry at Top!" 21 Q 22 ; 22 23 FMDTOUTC(DATE,FORMAT) ; Convert Fileman Date to UTC Date Format; PUBLIC; Extrinsic 23 24 ; FORMAT is Format of Date. Can be either D (Day) or DT (Date and Time) … … 47 48 E Q $P(UTC,"T") 48 49 ; 50 SORTDT(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.