Deutsch   English   Français   Italiano  
<e8d0009d34971a6c9a2e1df583843a10@www.novabbs.com>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!news.misty.com!weretis.net!feeder9.news.weretis.net!i2pn.org!i2pn2.org!.POSTED!not-for-mail
From: melahi_ahmed@yahoo.fr (Ahmed)
Newsgroups: comp.lang.forth
Subject: Re: Parsing =?UTF-8?B?dGltZXN0YW1wcz8=?=
Date: Tue, 8 Oct 2024 18:12:14 +0000
Organization: novaBBS
Message-ID: <e8d0009d34971a6c9a2e1df583843a10@www.novabbs.com>
References: <1f433fabcb4d053d16cbc098dedc6c370608ac01@i2pn2.org> <nnd$7d5c43ef$44717375@4ccc5001f6849bc6> <02c0761d5b634165a4f26eec23ab1cc17ff9945c@i2pn2.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Info: i2pn2.org;
	logging-data="1144928"; mail-complaints-to="usenet@i2pn2.org";
	posting-account="t+/9LUKLIiUqIe6reyFE7me/EcA/Gr17dRXgwnADesE";
User-Agent: Rocksolid Light
X-Spam-Checker-Version: SpamAssassin 4.0.0
X-Rslight-Posting-User: 5f6b2e70af503e44dad56966aa15d35bdef29623
X-Rslight-Site: $2y$10$2tekJuAAqh9iZpVNa/xvmunDXQpUit1XWDxkJ4B72z3HLshi3J2bm
Bytes: 2652
Lines: 59

Hi, Here is a programme that uses your split word.
I think it works for all combinations (formats).

\ here begins the code

: SPLIT ( a u c -- a2 u2 a3 u3 )  >r 2dup r> scan 2swap 2 pick - ;

: advance 1- swap 1+ swap ;

: .00?1
   dup 1 3 within 0= if 2drop  s" 00"   then
;

: .00?2
   dup 0=            if 2drop s" 00" exit then
   dup 1 3 within 0= if 2drop  2swap 2>r s" 00" 2swap 2r>   then
;

: .00?3
   dup 0=            if  2drop s" 00" exit then
   dup 1 3 within 0= if  2drop 2swap    2>r s" 00" 2rot 2rot 2r> then
;

: step1 [char] : split 2swap 2>r .00?1 2swap 2r> advance ;
: step2 [char] : split 2swap 2>r .00?2 2swap 2r> advance ;
: step3 [char] : split 2swap 2>r .00?3 2swap 2r> advance ;

: :t  s" --" 2swap step1 step2 step3  2drop 2drop ;

: sts space type space ;
: .hr  sts ." hr"  ;
: .min sts ." min" ;
: .sec sts ." sec" ;

: .t 2>r 2swap .hr .min 2r> .sec ;
\ the code finshes here.

Some tests (gforth under wsl):

s" 10:20:30" :t .t  10 hr 20 min 30 sec ok
s" 1:20:30" :t .t  1 hr 20 min 30 sec ok

s" 1:2:30" :t .t  1 hr 2 min 30 sec ok
s" 1:2:3" :t .t  1 hr 2 min 3 sec ok
s" :2:3" :t .t  00 hr 2 min 3 sec ok
s" 2:3" :t .t  00 hr 2 min 3 sec ok
s" :3" :t .t  00 hr 00 min 3 sec ok
s" ::3" :t .t  00 hr 00 min 3 sec ok
s" ::" :t .t  00 hr 00 min 00 sec ok
s" :" :t .t  00 hr 00 min 00 sec ok
s" " :t .t  00 hr 00 min 00 sec ok
s" 1:" :t .t  00 hr 1 min 00 sec ok
s" :1:" :t .t  00 hr 1 min 00 sec ok
s" 10::" :t .t  10 hr 00 min 00 sec ok
s" 10:5:" :t .t  10 hr 5 min 00 sec ok
s" 10:5:2" :t .t  10 hr 5 min 2 sec ok

Ahmed

--