ToString

Uma função complementar a “vl-princ-to-string”, “itoa”, “rtos”:


(defun tostring (v / tp spc tmp)
(
SETQ tp (type v))
(
cond ((= tp STR) (strcat “”” v “””))
((
= tp REAL) (rtos v 2 16))
((
= tp INT) (itoa v))
((
null v) “nil”)
((
listp v)
(
setq spc “”)
(
setq tmp “”)
(
foreach x v
(setq tmp
(strcat tmp
spc

(if (listp x)
(
if (listp (cdr x))
(
tostring x)
(
strcat “(“
(tostring (car x))
” . “
(tostring (cdr x))
“)”))
(
strcat (tostring x))))
spc ” “))
(
strcat “(“ tmp “)”))
(
t (vl-princ-to-string v))))


Uso: (tostring qualquer_coisa)
isso irá transformar qualquer coisa que seja passado a ela em string, num formato que possa ser usado pela função “write-line”, preservando a forma como aparece a no vlide
pode ser qualquer coisa, lista, numero, texto…

4 comentários em “ToString”

  1. cara, se vc quer mesmo isso, basta alterar esta linha:
    ((= tp ‘REAL) (rtos v 2 16))
    para
    ((= tp ‘REAL) (rtos v 2 3))

    isso irá arredondar para três casas decimais, mas tenha em mente que o ponto não será mais tão preciso, ok?

    usei 16 pois é o máximo que é suportado na precisão

    se bem que em muitos casos é uma preciosidade desnecessária

  2. acho que sim, não entendi direito a sua dúvida….

    digamos qe vc tenha:
    (setq lst ‘(1 2 “a 4 bb”))

    vc faz:
    (setq str (tostring lst))
    e obtem:
    “(1 2 “a 4 bb”)”

    que poderá ser escrito para um arquivo com o write-line:
    (setq file (open “c:/teste.txt” “w”))
    (write-line str file)
    (close file)

Deixe um comentário

Carrinho de compras
Rolar para cima