Zobrazit plnou verzi příspěvku: lisp - změna des. tečky na čárku

Mantlík
07.01.2005, 11:10
Dobrý den
Prosím o radu s následujícím problémem
Mám jednu jednoduchou funkci, jejímž výsledkem jsou dvě číselné hodnoty (s 2  desetinnými místy). Převedu si je na řetězec a spolu s několika fixními texty (jednotky) spojím do jednoho řetězce a jako text vložím do výkresu.
Je pravdou, že by tam mohla zůstat desetinná tečka, ale vzhledem k místním zvyklostem bych tam chtěl dát čárku. Kam to umístit, bych věděl, ale nějak mne nenapadá jednoduché řešení - jen (snad) rozříznout řetězec na část před tečkou a za tečkou a mezi ně vložit čárku. Nestkali jste se už někdo tím?
Děkuji
J. Mantlík

Seiner
07.01.2005, 11:50
Domnívám se, že v lispu přímé řešení neexistuje. Já používám (pro "inverzní" funkci) toto:
(defun inter(string / ii,ll,str) (if (/= string "")(progn   (setq ll (strlen string) ii 1 str string string "") (while (<= ii ll)    (if (= (substr str ii 1) ",")        (setq string (strcat string "."))        (setq string (strcat string (substr str ii 1)))     )    (setq ii (1+ ii)))))(setq string string))

Jan Liska
07.01.2005, 11:59
Dobrý den,
můžete také použít funkci VisualLispu vl-string-subst, např.
(vl-string-subst "," "." "123.456")
s pozdravem

Seiner
07.01.2005, 12:09
Děkuji panu Liškovi, že mne upozornil tak kulantně :-) ("můžete také" místo "co to navrhujete za zvrhlost"). Je vidět, že mé znalosti LISPu zatuhly před pár lety.

Mantlík
07.01.2005, 14:16
Děkuji
Ale protože mé znalosti jsou o dost menší, než p. Seinera, musím se ještě zeptat.
Je možno místo posledního řetězce ve výrazu (použil jste "123.456") použít proměnnou, obsahující řetězec?
např. tedy
(vl-string-subst "," "." p)
 
J. Mantlík

Jan Liska
07.01.2005, 14:26
Samozřejmě. vl-string-subst je funkce jako každá jiná, tzn. pro každý z parametrů lze použít proměnnou. Funkce je definována VisualLispem, proto to předpona vl-.
S pozdravem