Quando vamos escrever um número via autolisp, precisamos que ele esteja formatado com separadores de milhar essas coisas…
;|formata um numero real em uma string com f casas decimais
e com separador de milhar, exemplo:
(fnum 123456789.123456789 3)|;
(defun fnum (num f / int pos fp)
(setq int (rtos num 2 f)
pos (vl-string-search “.” int)
pos (if pos pos (strlen int))
fp (substr int (+ pos 2) (strlen int))
int (substr int 1 pos))
(while (< (strlen fp) f) (setq fp (strcat fp “0”)))
(repeat (/ pos 3)
(setq int (strcat (substr int 1 (– pos 3))
“.”
(substr int (– pos 2) (strlen int)))
pos (– pos 3)))
(vl-string-left-trim “.”
(if (zerop f) int (strcat int “,” fp))))
Com esta rotina pode-se fazer esta formatação… também serve de exemplo de como usar a função “vl-string-left-trim”
para desfazer a formatação acima, use:
;(unformatnum str):
;converte numeros do tipo 123.456.789,00 para 123456789.0
(defun unformatnum (str / v p)
(setq v (vl-string-search “,” str)
p (vl-string-search “.” str))
(atof
(cond ((and v p)
(vl-string-subst “.” “,”
(while (vl-string-search “.” str)
(setq str (vl-string-subst “” “.” str)))))
(v (vl-string-subst “.” “,” str))
(p str)
(t str))))
nas suas rotinas deve aparecer o (vl-load-com) ANTES de qualquer função visual lisp (que neste blog aparecem sempre em AZUL) que comece com “VL-“. isso irá carregar as extesões VL, sem elas, nada feito…
veja o help para VL-LOAD-COM, ok?
Onde estaria a definição da função
(vl-string-search “.” int)
que o autolisp não reconhece?