TuttoCAD Forum

TuttoCAD Forum
[ Home | Registrati | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Album Fotografico | Download | | Cerca | FAQ ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 1 - TuttoCAD Software
 AutoLISP
 dcl
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
I seguenti utenti stanno leggendo questo Forum Qui c'è:
Autore  Discussione Discussione Successiva  

NICOLA PONZONI
Nuovo Arrivato


Regione: Emilia Romagna
Prov.: Piacenza
Città: PIACENZA


1 Messaggi

Inserito il - 22 aprile 2024 : 23:44:25  Mostra Profilo Invia a NICOLA PONZONI un Messaggio Privato  Rispondi Quotando
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  Mostra Profilo Invia a Giuseppe Mauro un Messaggio Privato  Rispondi Quotando
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)
Torna all'inizio della Pagina
   Discussione Discussione Successiva  
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
Vai a:
TuttoCAD Forum © 2001-2010 CADLandia Torna all'inizio della Pagina
Pagina generata in 0,24 secondi.