Problemi di funzionamento

Angelo2449

Utente Junior
Professione: Pensionato
Software: Autocad
Regione: Lombardia
#1
Salve a tutti,
ho scritto questo codice :
Codice:
(defun PN2 (/ Corr1 Corr2 Hpn  ....................................................................)
..................................
.................................
    (if (= Volte "1")
        (progn
            (princ "\n")
            (princ "Volte >>>>>>>>>>>> ")
            (princ Volte)
            (princ "\n")
            (setq Volte "2")
            (setq fp1 (open "C:\\AutocadSupporto\\Varie\\DatiPuntoNascosto.dat" "w"))
                (write-line HvTxt fp1)
                (write-line Volte fp1)
                (write-line DislivelloPuntoNascostoTxt fp1)
            (close fp1)
            (RunApp "C:\\AutocadSupporto\\LibertyTre\\DroneVolte1.exe " "C:\\AutoCadSupporto\\LibertyTre\\DroneVolte1.tkn" :vlax-true) 

            (setq Risposta (getClipText))
            (princ "\n")
            (princ "Risposta >>>>>>>>>>>> ")
            (princ Risposta)
            (princ "\n")
            (if (= Risposta "SI")
                (PN2)
            );;if
        );;progn
        (progn
            (princ "\n")
            (princ "Volte >>>>>>>>>>>> ")
            (princ Volte)
            (princ "\n")
            (RunApp "C:\\AutocadSupporto\\LibertyTre\\DroneVolte2.exe " "C:\\AutoCadSupporto\\LibertyTre\\DroneVolte2.tkn" :vlax-true) 
            (setq Controllo1 nil)
            (setq Controllo1 (findfile "C:\\AutocadSupporto\\Varie\\DatiDrone.dat"))
            (if (= Controllo1 "C:\\AutocadSupporto\\Varie\\DatiDrone.dat")
                (vl-file-delete "C:\\AutocadSupporto\\Varie\\DatiDrone.dat")
            );;if
            ;; ------------------------------------------------------------
            (setq Controllo1 nil)
            (setq Controllo1 (findfile "C:\\AutocadSupporto\\Varie\\QuotePuntoNascosto.dat"))
            (if (= Controllo1 "C:\\AutocadSupporto\\Varie\\QuotePuntoNascosto.dat")
                (vl-file-delete "C:\\AutocadSupporto\\Varie\\QuotePuntoNascosto.dat")
            );;if
            ;; ------------------------------------------------------------
            (setq Controllo1 nil)
            (setq Controllo1 (findfile "C:\\AutocadSupporto\\Varie\\DatiPuntoNascosto.dat"))
            (if (= Controllo1 "C:\\AutocadSupporto\\Varie\\DatiPuntoNascosto.dat")
                (vl-file-delete "C:\\AutocadSupporto\\Varie\\DatiPuntoNascosto.dat")
            );;if
        );;progn           
    );;if
La procedura > DroneVolte1.exe < restituisce, dopo l'esecuzione, effettivamente "SI" come > Risposta < ma > PN2 < non parte per la seconda volta.
Evidentemente per ricorsività, ho provato anche con altre procedure anziché > PN2 < ma nulla parte.
Motivo?
Grazie mille.
 

rpor66

Utente Standard
Professione: Programmatore
Software: AutoCad, GstarCAD, CadWorx, Excel, Lisp, VBA
Regione: Sicilia
#2
Il codice relativo a VOLTE=2 lo sposterei all'interno della condizione, senza richiamare PN2 in maniera ricorsiva:
Codice:
(defun PN2 (/ Corr1 Corr2 Hpn  ..................................................)
    (if (= Volte "1")
        (progn
            (princ "\n")
            (princ "Volte >>>>>>>>>>>> ")
            (princ Volte)
            (princ "\n")
            (setq Volte "2")
            (setq fp1 (open "C:\\AutocadSupporto\\Varie\\DatiPuntoNascosto.dat" "w"))
                (write-line HvTxt fp1)
                (write-line Volte fp1)
                (write-line DislivelloPuntoNascostoTxt fp1)
            (close fp1)
            (RunApp "C:\\AutocadSupporto\\LibertyTre\\DroneVolte1.exe " "C:\\AutoCadSupporto\\LibertyTre\\DroneVolte1.tkn" :vlax-true)

            (setq Risposta (getClipText))
            (princ "\n")
            (princ "Risposta >>>>>>>>>>>> ")
            (princ Risposta)
            (princ "\n")
            (if (= Risposta "SI")
                (progn
                    (princ "\n")
                    (princ "Volte >>>>>>>>>>>> ")
                    (princ Volte)
                    (princ "\n")
                    (RunApp "C:\\AutocadSupporto\\LibertyTre\\DroneVolte2.exe " "C:\\AutoCadSupporto\\LibertyTre\\DroneVolte2.tkn" :vlax-true)
                    (setq Controllo1 nil)
                    (setq Controllo1 (findfile "C:\\AutocadSupporto\\Varie\\DatiDrone.dat"))
                    (if (= Controllo1 "C:\\AutocadSupporto\\Varie\\DatiDrone.dat")
                        (vl-file-delete "C:\\AutocadSupporto\\Varie\\DatiDrone.dat")
                    );;if
                    ;; ------------------------------------------------------------
                    (setq Controllo1 nil)
                    (setq Controllo1 (findfile "C:\\AutocadSupporto\\Varie\\QuotePuntoNascosto.dat"))
                    (if (= Controllo1 "C:\\AutocadSupporto\\Varie\\QuotePuntoNascosto.dat")
                        (vl-file-delete "C:\\AutocadSupporto\\Varie\\QuotePuntoNascosto.dat")
                    );;if
                    ;; ------------------------------------------------------------
                    (setq Controllo1 nil)
                    (setq Controllo1 (findfile "C:\\AutocadSupporto\\Varie\\DatiPuntoNascosto.dat"))
                    (if (= Controllo1 "C:\\AutocadSupporto\\Varie\\DatiPuntoNascosto.dat")
                        (vl-file-delete "C:\\AutocadSupporto\\Varie\\DatiPuntoNascosto.dat")
                    );;if
                );;progn 
            );;if
        );;progn                 
    );;if
)
 

Angelo2449

Utente Junior
Professione: Pensionato
Software: Autocad
Regione: Lombardia
#3
Ho applicato la tua versione ma non funziona.
Il mio intento è quello di far ripartire > PN2 < in caso di > Risposta < = "SI".
Grazie.
 

Angelo2449

Utente Junior
Professione: Pensionato
Software: Autocad
Regione: Lombardia
#4
Ho provato a modificare il programma scrivendo una routine denominata > PN3 <( non presente qui) uguale a > PN2 <, tento di lanciarla alla Risposta "SI" ma nulla succede, non viene dato messaggio di errore!
Codice:
    (if (= Volte "1")
        (progn
            (princ "\n")
            (princ "Volte >>>>>>>>>>>> ")
            (princ Volte)
            (princ "\n")
            (setq Volte "2")
            (setq fp1 (open "C:\\AutocadSupporto\\Varie\\DatiPuntoNascosto.dat" "w"))
                (write-line HvTxt fp1)
                (write-line Volte fp1)
                (write-line DislivelloPuntoNascostoTxt fp1)
            (close fp1)
            (RunApp "C:\\AutocadSupporto\\LibertyTre\\DroneVolte1.exe " "C:\\AutoCadSupporto\\LibertyTre\\DroneVolte1.tkn" :vlax-true)

            (setq Risposta (getClipText))
            (princ "\n")
            (princ "Risposta >>>>>>>>>>>> ")
            (princ Risposta)
            (princ "\n")
            (if (= Risposta "SI")
                (PN3)
            );;if
        );;progn
        (progn
            (princ "\n")
            (princ "Volte >>>>>>>>>>>> ")
            (princ Volte)
            (princ "\n")
            (RunApp "C:\\AutocadSupporto\\LibertyTre\\DroneVolte2.exe " "C:\\AutoCadSupporto\\LibertyTre\\DroneVolte2.tkn" :vlax-true)
            (setq Controllo1 nil)
            (setq Controllo1 (findfile "C:\\AutocadSupporto\\Varie\\DatiDrone.dat"))
            (if (= Controllo1 "C:\\AutocadSupporto\\Varie\\DatiDrone.dat")
                (vl-file-delete "C:\\AutocadSupporto\\Varie\\DatiDrone.dat")
            );;if
            ;; ------------------------------------------------------------
            (setq Controllo1 nil)
            (setq Controllo1 (findfile "C:\\AutocadSupporto\\Varie\\QuotePuntoNascosto.dat"))
            (if (= Controllo1 "C:\\AutocadSupporto\\Varie\\QuotePuntoNascosto.dat")
                (vl-file-delete "C:\\AutocadSupporto\\Varie\\QuotePuntoNascosto.dat")
            );;if
            ;; ------------------------------------------------------------
            (setq Controllo1 nil)
            (setq Controllo1 (findfile "C:\\AutocadSupporto\\Varie\\DatiPuntoNascosto.dat"))
            (if (= Controllo1 "C:\\AutocadSupporto\\Varie\\DatiPuntoNascosto.dat")
                (vl-file-delete "C:\\AutocadSupporto\\Varie\\DatiPuntoNascosto.dat")
            );;if
        );;progn           
    );;if
 

rpor66

Utente Standard
Professione: Programmatore
Software: AutoCad, GstarCAD, CadWorx, Excel, Lisp, VBA
Regione: Sicilia
#5
Non funziona significa che se Risposta è "SI" non viene avviato il file DroneVolte2.exe?
Sei sicuro che Risposta è "SI", hai provato a verificare la lunghezza della stringa?
 

Angelo2449

Utente Junior
Professione: Pensionato
Software: Autocad
Regione: Lombardia
#6
Dopo numerose modifiche, finalmente il programma reagisce alla Risposta "SI" ora mi dice che non esiste una funzione > PN3> ma è già un'altra cosa!
Faccio sapere.
 

Angelo2449

Utente Junior
Professione: Pensionato
Software: Autocad
Regione: Lombardia
#7
Ok ora il problema è un altro!
Carico la funzione > PN3 < non ci sono errori.
Avvio la funzione > PN2 <, nel momento di avviare > PN3 < ricevo :
Volte >>>>>>>>>>>> 1
Risposta >>>>>>>>>>>> SI
; errore: no function definition: PN3
è a dir poco disarmante!
Grazie
 

Angelo2449

Utente Junior
Professione: Pensionato
Software: Autocad
Regione: Lombardia
#8
Ho risolto il problema in modo semplicistico ma funzionante.
Ho creato la funzione > PN3 < all'interno di un unico programma Lisp in modo che > PN2 < e > PN3 < vangano caricati assieme e che > PN2 < veda > PN3 <.
Tutto funziona perfettamente.
Ringrazio tutti.