home bbs files messages ]

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