Page 1 of 1

Non-destructive replace?

Posted: Tue Jan 10, 2006 2:34 pm
by cormullion
How do I a non-destructive replace? I've realised that my problem is:

(set 'new-filename (replace "." old-file-name "copy."))

- I've destroyed the old-file-name...

It seems wrong to make a safe copy beforehand.

Posted: Tue Jan 10, 2006 2:49 pm
by Lutz
Just wrap the old filename with anything which returns the filename:

Code: Select all

> (set 'old "myfile.txt")
"myfile.txt"
> (replace "." (string old) ".copy.")
"myfile.copy.txt"
> old
"myfile.txt"
> 
even 'if', 'or', 'and' or 'begin' would work, but 'string' is more descriptive. Or using implicit 'slice'

Code: Select all

(replace "." (0 old) ".copy.")

Lutz

Posted: Tue Jan 10, 2006 3:58 pm
by cormullion
(replace "." (string old) ".copy.")
That's clever - thanks!

Posted: Tue Jan 10, 2006 7:25 pm
by Fanda
Instead of a (string old) you could also use:

Code: Select all

(set 'old)  or  (setq old)
Fanda