Page 1 of 1
String interpolation
Posted: Sat Dec 03, 2005 2:29 pm
by cormullion
Is there a way to interpolate a value into a string? I'm thinking of an equivalent to Ruby's #{ } construct:
name = "foo"
result = "Goodnight, #{name}" #=> "Goodnight, foo"
but particularly for very long strings:
[text]
would be good
to be able to stick this >>value<<
in the middle of this string
[/text]
Posted: Sat Dec 03, 2005 2:36 pm
by Lutz
You could do this instead:
Code: Select all
(set 'var "foo")
(replace "#var#" "Good night #var#" var)
=> "Good night foo"
Lutz
Posted: Sat Dec 03, 2005 2:46 pm
by Lutz
Try this little function:
Code: Select all
(define-macro (repvar str)
(dolist (_v (args))
(replace (append "#" (name _v)) (eval str) (eval _v))))
(set 'var "foo")
(repvar "Goodnight #var" var) => "Goodnight foo"
Lutz
Posted: Sat Dec 03, 2005 3:03 pm
by cormullion
Ha, you're too quick for me, Lutz. :-) I've just got this AppleScript interface working in response to your first answer:
(set 'applescript
[text]
set pf to POSIX file "#file#"
tell application "Finder" to set comment of pf to "#text#"
[/text])
(define (set-spotlight-comment file comment)
(replace "#file#" applescript file)
(replace "#text#" applescript comment)
(exec (string "osascript -e '" applescript "'" )))
(set-spotlight-comment "/Users/.../Documents/foo.bar" "comment for Spotlight")
(replace) is a powerful little command!
Posted: Tue Dec 06, 2005 5:37 am
by alex
Why You can't use (format) ?
Posted: Tue Dec 06, 2005 8:05 am
by cormullion
You're right!
(hits head)