NICOLA PONZONI
Nuovo Arrivato
Regione: Emilia Romagna
Prov.: Piacenza
Città: PIACENZA
1 Messaggi |
Inserito il - 22 aprile 2024 : 23:44:25
|
Ciao a tutti, ho fatto una dcl dove l'utente inserisce diametro x e y di un cerchio
funziona alla perfezione. ma ora vorrei fare una piccola operazione sui numeri che inserisce l'utente, in pratica vorrei sommare un certo numero al parametro y
non funziona.. non riesco a capire. non lo interpreta come numero ne come testo. non riesco a fare una semplice somma su quei numeri inseriti allego dcl e lisp
il problema è dalla riga 68 dove cerco di sommare 20 al valore inserito dall'utente nella dcl
grazie
Scarica allegato:
foro_dcl.zip 31,59 KB
Scarica allegato:
foro_dcl.zip 31,59 KB
|
|
Giuseppe Mauro
Amministratore
Regione: Campania
Prov.: Napoli
2705 Messaggi |
Inserito il - 01 maggio 2024 : 13:12:49
|
Quando acquisisci il valore dalla dcl, lo fai mediante un "get_tile" Ciò che get_tile restituisce è una stringa (un testo)
poi dici (setq pos1 (substr posforo 4 2)) e ti funziona perché "posforo" evidentemente è una stringa, di cui "pos1" è una sottostringa
Poi chiedi al lisp di sommare 20 a pos1. Quindi senza entrare nel merito di ciò che pos1 contiene, stai chiedendo al lisp di sommare 20 (intero) e "abc" (operazione non possibile, evidentemente). Poi ancora (print (strcat "pos1y e'..... :" pos1y)) dove chiedi di concatenare 2 stringhe di cui la seconda dovrebbe essere un numero.
Autolisp non funziona così.
Le stringhe si concatenano se sono stringhe, i numeri si sommano se sono numeri. Non puoi sommare un numero con una stringa (anche se la stringa rappresenta un numero); Non puoi concatenare una stringa con un numero. Esistono comandi appositi per il passaggio tra i due elementi. rtos (real to string) - converte un numero tipo 20,41 in una stringa "20.41"; atof (string to real) - converte "20.13" in un numero 20.13
Quindi devi SEMPRE verificare un dato comando che tipologia di valore restituisce (real, integer, string, list etc) per poter operare successivamente. Per esempio (print (strcat "pos1y e'..... :" pos1y)) dovrebbe diventare (print (strcat "pos1y e'..... :" (rtos pos1y 2 2))) e (setq pos1y (+ 20 pos1)) dovrebbe essere (setq pos1y (+ 20 (atof pos1)))
i valori 2 e 2 di rtos possono anche essere omessi, in questo caso la stringa sarà realizzata utilizzando i valori di decimali che stai usando correntemente così come la notazione (scientifica, decimale etc)
|
|
|