Angelo2449
Utente Junior
professione: Pensionato
software: Autocad
regione: Lombardia
Salve a tutti,
sto cercando di scrivere un codice che prevede l'uso di programmi esterni a lisp :
Continuo ad avere errori perché, penso, non riesco a fermare il programma lisp prima che il programma esterno faccia il suo compito.
Mi spiego meglio :
mi avvalgo di maschere scritte in una sorta di visual basic per l'input ed il salvataggio dei dati, i dati devono, poi essere letti dal lisp per proseguire.
Ho l'impressione che il lisp tenti di estrarre i dati presenti sul disco fisso prima che questi vengano salvati dl programma basic.
Tutti i tentativi fatti per evitare l'avanzamento del lisp se non dopo l'esecuzione del basic, sono stati inutili.
qualcuno ne sa qualcosa?
Grazie.
sto cercando di scrivere un codice che prevede l'uso di programmi esterni a lisp :
Codice:
(defun C:RIFERIMENTO (/ Riferimento SecondaLinea risp FlagControllo txt1 txt2 LungNomeBase NomePuntoBase Lung CxBB CyBB CzBB Stringa1 ed1 Stazione NotaX)
(if (= help 1)
(progn
(startapp "C:\\AutocadSupporto\\Liberty\\Rif.exe " "C:\\AutocadSupporto\\Liberty\\Rif.tkn")
(exit)
)
)
(setq FC1 (findfile "C:\\AutocadSupporto\\Dati\\DatiRilievo.dat"))
(if FC1
(vl-file-delete "C:\\AutocadSupporto\\Dati\\DatiRilievo.dat")
)
(setq FC2 (findfile "C:\\AutocadSupporto\\Dati\\Risposta.dat"))
(if FC2
(vl-file-delete "C:\\AutocadSupporto\\Dati\\Risposta.dat")
)
(setq FC3 (findfile "C:\\AutocadSupporto\\Note\\Nota.dat"))
(if FC3
(vl-file-delete "C:\\AutocadSupporto\\Note\\Nota.dat")
)
(if (= Primariga 1)
(alert "La Riga di riferimento è già stata inserita")
)
(startapp "C:\\AutocadSupporto\\Liberty\\DatiGPS.exe " "C:\\AutoCadSupporto\\Liberty\\DatiGPS.tkn")
(setq ed1 nil)
(while
(= ed1 nil)
(setq ed1 (entsel "\nSeleziona la Linea di riferimento : "))
)
(setq flagDati nil)
(while (= FlagDati nil)
(setq FlagDati (findfile "C:\\AutocadSupporto\\Dati\\DatiRilievo.dat"))
)
(if FlagDati
(progn
(setq fp3 (open "C:\\AutocadSupporto\\Dati\\DatiRilievo.dat" "r"))
(setq DataOdierna (read-line fp3))
(setq Ora (read-line fp3))
(setq Pdop (read-line fp3))
(close fp3)
)
)
(setq ed1 (entget (car ed1)))
(setq txt1 (cdr (assoc 1 ed1)))
(setq txt2 (cdr (assoc 10 ed1)))
(setq Lung (strlen txt1))
(setq LungNomeBase (- Lung 77))
(setq NomePuntoBase (substr txt1 1 LungNomeBase))
(setq Stazione nil)
(setq NotaX nil)
(startapp "C:\\AutocadSupporto\\Liberty\\Stazione.exe " "C:\\AutoCadSupporto\\Liberty\\Stazione.tkn")
(setq FlagControllo nil)
(while (= FlagControllo nil)
(setq FlagControllo (findfile "C:\\AutocadSupporto\\Note\\Nota.dat"))
)
(if FlagControllo
(progn
(princ "\n")
(setq fp2 (open "C:\\AutocadSupporto\\Note\\Nota.dat" "r"))
(setq Stazione (read-line fp2))
(setq NotaX (read-line fp2))
(close fp2)
)
)
(setq pos1 (- (strlen txt1) 58))
(setq xyz (substr txt1 pos1 34))
(setq CxB (substr xyz 1 11))
(setq CyB (substr xyz 13 10))
(setq CzB (substr xyz 24 11))
(setq CxBB (atof CxB))
(setq CyBB (atof CyB))
(setq CzBB (atof CzB))
(setq Nota2 (strcat NomePuntoBase " - " NotaX " - " Stazione))
(setq Riferimento (strcat "1|" Stazione "|" xyz "|0.000| WGS84-RTF2000] " Nota2 "|"))
(setq SecondaLinea (strcat "6|L1|" DataOdierna "-" Ora "|RTK|PDOP=" Pdop "|"))
(while
(and (/= risp "S") (/= risp "N"))
(prompt "\nDevo salvare i dati ? (S/N) : ")
(setq risp (getstring))
(setq risp (strcase risp))
)
(if (= risp "S")
(progn
(setq fp1 (open "C:\\AutocadSupporto\\Libretto\\LibrettoPregeo.dat" "a"))
(write-line Riferimento fp1)
(write-line SecondaLinea fp1)
(close fp1)
(startapp "C:\\AutocadSupporto\\Liberty\\OK.exe " "C:\\AutoCadSupporto\\Liberty\\OK.tkn")
(setq Riferimento nil)
(setq SecondaLinea nil)
)
)
(if (= risp "N")
(startapp "C:\\AutocadSupporto\\Liberty\\No.exe " "C:\\AutoCadSupporto\\Liberty\\No.tkn")
)
(setq Ind "")
(setq Indice(strcat Ind NomePuntoBase))
(setq Primariga 1)
) ; fine
Continuo ad avere errori perché, penso, non riesco a fermare il programma lisp prima che il programma esterno faccia il suo compito.
Mi spiego meglio :
mi avvalgo di maschere scritte in una sorta di visual basic per l'input ed il salvataggio dei dati, i dati devono, poi essere letti dal lisp per proseguire.
Ho l'impressione che il lisp tenti di estrarre i dati presenti sul disco fisso prima che questi vengano salvati dl programma basic.
Tutti i tentativi fatti per evitare l'avanzamento del lisp se non dopo l'esecuzione del basic, sono stati inutili.
qualcuno ne sa qualcosa?
Grazie.