Tim,

I'm relatively new to dialects, too, but I gave it a try.

Though the gurus can probably do it better, I have discovered that the rule
        copy x skip (append block x)
works like an "else do nothing" at the end of a string substituion parse.

I did get it to keep the s's, but my code can probably be made much more
effiecient, and tested a lot better.

Merry Christmas to all,

Stan Silver
 
REBOL [
        Title: "printf"
        Author: "Tim Johnson"
        ModifiedBy: "Stan Silver"
]

printf: function[str[string!] subs[block!]] 
        [delims non-delims blk ndx ][
        delims: charset "%s"
        non-delims: complement delims
        blk: copy []
        ndx: 1
        parse/all str[
                some [
                        copy txt some non-delims (
                                append blk txt 
                                if ndx <= (length? subs)[
                                        append blk subs/:ndx
                                        ]
                                ndx: ndx + 1
                                ) | 
                                delims
                        ] ; end some
                ]
        rejoin blk
        ];end func 

printf2: function[str [string!] subs [block!]] 
        [delim blk ndx x][
        delim: "%s"
        blk: copy []
        ndx: 1
        parse/all str [
                some [
                        delim
                        (       if ndx <= (length? subs)[
                                        append blk subs/:ndx
                                ]
                                ndx: ndx + 1
                        )
                        | 
                        copy x skip (append blk x)
                        ] ; end some
                ]; end parse
        rejoin blk
        ];end func 

; ======;
; TESTS ;
; ======;
???: func [result 'ignore desired] [
        if not (result = desired) [
                print ["TEST FAILED" mold result ignore mold desired]
        ]
]

??? printf "doesn't%skeep%sthe_s's" [1 2]       >> "doe1n't2keepthe_'"
??? printf2 "does%skeep%sthe_s's" [1 2] >> "does1keep2the_s's"
??? 'should                                             >> 'fail

-- 
To unsubscribe from this list, just send an email to
[EMAIL PROTECTED] with unsubscribe as the subject.

Reply via email to