Just revisited this function & made some modifications.
;; CAB 08.31.09
(defun str-format (str lst / r)
(mapcar '(lambda (x y)
(while (vl-string-search y str 0)
(setq str (vl-string-subst (vl-princ-to-string x) y str)))
)
lst
(mapcar '(lambda(x)
(strcat "%" (itoa(if r (setq r (1+ r))(setq r 1))))) lst)
)
str
)
(str-format "As you wish number %1, %2 is my favorite %3." (list 1 pi "number"))
"As you wish number 1, 3.14159 is my favorite number."