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,889 of 117,927   
   Gerry Jackson to dxf   
   Re: Parsing timestamps?   
   18 Oct 24 15:46:27   
   
   From: do-not-use@swldwa.uk   
      
   On 06/10/2024 08:51, 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   
      
   Another solution   
      
   : /t  ( ca u -- sec min hour )   
       3        \ a count, decremented every recurse   
       [: -rot dup 0>   
          if 0. 2swap >number 1 /string 2swap drop ( -- ct ca' u' n1 )   
             >r rot 1-   
             recurse r> swap exit   
          then 2drop   
       ;] execute   
       0 ?do 0 loop   \ 0 hours and minutes if missing in source string   
      
   : .t   cr . ." hr "  . ." min " . ." sec " ;   
      
   cr   
   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   
   s" " /t .t   
   s" :" /t .t   
   s" :53" /t .t   
   s" 11/12/13" /t .t   \ Different separator   
   s" 11::13" /t .t   
   s" :::" /t .t   
   s" 3:" /t .t   
   s" 1:2:" /t .t   
      
   \ Results   
   1 hr 2 min 3 sec   
   0 hr 2 min 3 sec   
   0 hr 0 min 3 sec   
   23 hr 59 min 59 sec   
   0 hr 0 min 3 sec   
   0 hr 0 min 0 sec   
   0 hr 0 min 0 sec   
   0 hr 0 min 53 sec   
   11 hr 12 min 13 sec   
   11 hr 0 min 13 sec   
   0 hr 0 min 0 sec   
   0 hr 0 min 3 sec   
   0 hr 1 min 2 sec   
      
   The last two could be regarded as wrong but you indicated elsewhere that   
   they wouldn't occur.   
      
   Any non-digit is a separator   
      
   --   
   Gerry   
      
   --- 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