Forums before death by AOL, social media and spammers... "We can't have nice things"
|    comp.lang.forth    |    Forth programmers eat a lot of Bratwurst    |    117,927 messages    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
|    Message 116,846 of 117,927    |
|    dxf to dxf    |
|    Re: Parsing timestamps?    |
|    07 Oct 24 02:34:19    |
      From: dxforth@gmail.com              On 6/10/2024 11:58 pm, dxf wrote:       > On 6/10/2024 7:59 pm, mhx wrote:       >> On Sun, 6 Oct 2024 7:51:31 +0000, dxf wrote:       >>       >>> Is there an easier way of doing this? End goal is a double number       >>> representing centi-secs.       >>>       >>>       >>> empty decimal       >>>       >>> : SPLIT ( a u c -- a2 u2 a3 u3 ) >r 2dup r> scan 2swap 2 pick - ;       >>> : >INT ( adr len -- u ) 0 0 2swap >number 2drop drop ;       >>>       >>> : /T ( a u -- $hour $min $sec )       >>> 2 0 do [char] : split 2swap dup if 1 /string then loop       >>> 2 0 do dup 0= if 2rot 2rot then loop ;       >>>       >>> : .T 2swap 2rot cr >int . ." hr " >int . ." min " >int . ." sec " ;       >>>       >>> s" 1:2:3" /t .t       >>> s" 02:03" /t .t       >>> s" 03" /t .t       >>> s" 23:59:59" /t .t       >>> s" 0:00:03" /t .t       >>       >> Why don't you use the fact that >NUMBER returns the given       >> string starting with the first unconverted character?       >> SPLIT should be redundant.       >       > Good idea!       >       > : /T ( a u -- hour min sec )       > 3 0 do       > 0 0 2swap >number rot drop ( u ... a u)       > dup if over c@ [char] : = 1 and /string then       > loop 2drop       > 2 0 do dup 0= if rot rot then loop ;       >       > : .T cr . ." sec " . ." min " . ." hr " ;       >       > s" 1:2:3" /t .t       > s" 02:03" /t .t       > s" 03" /t .t       > s" 23:59:59" /t .t       > s" 0:00:03" /t .t              Bug fix:              variable cnt              : @SEC ( a u -- ud ) \ HH:MM:SS or free-form        0 cnt ! 3 0 do        0 0 2swap >number rot drop ( u ... a u)        dup if 1 /string 1 cnt +! then        loop 2drop cnt @ 1+ 0 do rot loop ( fixup)       \ swap secs/min * + swap secs/hour um* rot 0 d+ ;              : .3 ( h m s -- ) cr rot . swap . . ;              s" 00:00:06" @sec .3       s" 00:06:00" @sec .3       s" 06:00:00" @sec .3       cr       s" 06" @sec .3       s" 06:00" @sec .3       s" 06:00:00" @sec .3              --- SoupGate-Win32 v1.05        * Origin: you cannot sedate... all the things you hate (1:229/2)    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
(c) 1994, bbs@darkrealms.ca