Hi dean,

I experimented with this problem for a few minutes and didn't come up with
anything worth posting. A few comments though:

1. Your picolisp code is becoming easier to read. Nice work!
2. My initial thought was to split the input into words and replace
sublists, however it looks like you don't have a word delimiter (typically
a space)...Since you need to be able to substitute "fl ow" with "flow". As
a result, the best I came up with is something similar (looping through
characters and testing the replacement)
3. Why do you need to work with bytes vs chars?  (mapcar char (chop Sfrom))
?



On Tue, Feb 21, 2017 at 3:37 AM, dean <deangwillia...@gmail.com> wrote:

> I need to globally replace certain words in a text file and because
> I need to process it a byte at a time initially...I'm inputting
> processed list of bytes into the global replace function "lchg"
> (and others) like this.
>
> (lbytes_to_fl Cleaned_txt_pth
>    (lchg "fl ow" "flow"
>        (fltr2
>            (fltr1
>                 (fl_to_lbytes Txt_pth)))))
>
> The other filters seem ok but this one is slow (most likely my
> algorithm/general approach :)) and any help to
> speed things up would be much appreciated.
>
> (de lchg (Sfrom Sto Lbytes)
>    (make
>       (let
>          (X 0
>             B NIL
>             Lfrom (mapcar char (chop Sfrom))
>             Lto (mapcar char (chop Sto))
>             First_from_ch (car Lfrom)
>             Len_from-1 (- (length Lfrom) 1)
>             Len_lbytes (length Lbytes) )
>          (until (<= (length Lbytes) X)
>             (inc 'X)
>             (setq B (get Lbytes X))
>             (if (= B First_from_ch)
>                (prog
>                   (if (= (slice Lbytes X (+ X Len_from-1)) Lfrom)
>                      (prog
>                         (for MatchB Lto
>                            (link MatchB) )
>                         (inc 'X Len_from-1) )
>                      (link B) ) )
>                (link B) ) ) ) ) )
>
>    (de slice (Lst I K) (head (inc (- K I)) (nth Lst I)) ) #99
>
> Here's "lchg" in action...
>
> : (setq L (chop "ab fl ow flow fl ow yz"))
> -> ("a" "b" " " "f" "l" " " "o" "w" " " "f" "l" "o" "w" " " "f" "l" " "
> "o" "w" " " "y" "z")
> : (pack (mapcar char (lchg "fl ow" "flow" (mapcar char L))))
> -> "ab flow flow flow yz"
>
>

Reply via email to