Newsgroup: it.comp.software.cad
Titolo: Variante a questo Lisp

Il Lisp seguente scaricato da 
www.cadlandia.com
inserisci i punti nel formato xxx,yyy,zzz
avrei bisogno di inserire anche un commento text ad ogni punto
del tipo xxx,yyy,zzz,commento
qualcuno muò aiutarmi?
grazie ebuon lavoro
; INSPOINT.LSP
; COPYRIGHT 2000 CADLandia
;
; Questo Lisp inserisce una serie di punti da un file ASCII.
; Il file testo deve contenere per ogni riga il punto, che deve essere del
tipo:
; xxx,yyy,zzz
;
; 31/12/2000 Aniello Annunziata per CADLandia
; 
aniello.a...@cadlandia.com
; 
www.cadlandia.com
(defun C:INSPunti
          (
            / filename i-file data
          )
(setq
      filename (getfiled "Scegli il file di testo " "*.*" "" 4)
      i-file (open filename "r")
);setq
(if i-file
  (progn
       (setq data (read-line i-file))
      (while data
         (command "_point" data)
         (setq data (read-line i-file))
      );while
      (close i-file)
  );progn
(princ "\nNon hai selezionato nessun file, oppure s'è verificato un errore
di I/O!")
);if
(princ)
);defun
(princ "\nINSPOINT.LSP caricato. Digita C:INSPOINT per avviare il comando.")
(princ)

Prova questo LISP, mi costa meno tempo che variarti il tuo.
Legge i punti da un file TXT contenente per ogni riga i valori di un punto
nel seguente formato:
CODICE X Y Z (separati da uno spazio).
Ciao Claudio
;;;----------------------------------------
(defun c:rot ()
(if (not scala-txt)(setq scala-txt(getreal "\n Altezza delle scritte: ")))
(setq tipo(getint "\n Punti 2D o 3D <2/3>: "))
(setvar "cmdecho" 0)
(setq nomefile(getfiled "Selezionare il nome del File di punti" "" "txt" 4))
(setq nome-f(open nomefile "r"))
(setq conta 1)
(setq riga(read-line nome-f))
(while riga
(setq lriga(strlen riga))
(setq i 0)
(setq n "" x "" y "" z "")
(setq lett-chr " ")
(while (= lett-chr " ")(lett-car))
(setq n(strcat n lett-chr))
(while (/= lett-chr " ")(lett-car)(if (/= lett-chr " ")(setq n(strcat n
lett-chr))))
(princ "\r Attendere... inserimento punto n. ")(princ n)
(if (= conta 100) (progn
(command "_zoom" "_e" \r)
(setq conta 0)
)
)
(while (= lett-chr " ")(lett-car))
(setq x(strcat x lett-chr))
(while (/= lett-chr " ")(lett-car)(if (/= lett-chr " ")(setq x(strcat x
lett-chr))))
(while (= lett-chr " ")(lett-car))
(setq y(strcat y lett-chr))
(while (/= lett-chr " ")(lett-car)(if (/= lett-chr " ")(setq y(strcat y
lett-chr))))
(while (= lett-chr " ")(lett-car))
(setq z(strcat z lett-chr))
(while (/= lett-chr "")(lett-car)(if (/= lett-chr "")(setq z(strcat z
lett-chr))))
(setq punto(list (atof x) (atof y) (atof z)))
(setq puntoxy(list (atof x) (atof y) 0.0))
(command "_layer" "_m" "PUNTI" \R)
(if (= tipo 3)(command "_point" punto \r)(command "_point" puntoxy \r))
(setq xy(polar puntoxy 0 (/ scala-txt 2)))
(setq xygiu(polar xy (* pi 1.5) (* scala-txt 1.3)))
(setq xysu(polar xy  (* pi 0.5) (* scala-txt 0.3)))
(command "_layer" "_m" "CODICI" \R)
(command "_text" "_c" xysu
(rtos scala-txt 2 2)
"0"
n
\r)
(command "_layer" "_m" "QUOTE" \R)
(command "_text" "_c" xygiu
(rtos scala-txt 2 2)
"0"
(rtos (atof z) 2 2)
\r)
(setq conta(+ conta 1))
(setq riga(read-line nome-f))
(if (= riga "")(setq riga(read-line nome-f)))
)
(close nome-f)
(princ)
)
(defun lett-car ()
(setq i(+ i 1))
(setq lett-chr(substr riga i 1))
)
(setq tipo nil)
(setq scala-txt nil)
(princ "\n  Software per l'inserimento nel disegno di punti")
(princ "\n  2D o 3D. Le coordinate vengono lette da un file .txt")
(princ "\n  avente un punto su ogni riga.")
(princ "\n  Formato della riga: CODICE X  Y  Z  separati da spazi.")
(princ "\n <copyright: ing. Claudio Granuzzo 2001> ")
(princ "\n  Digitare ROT per lanciare il programma!")
(princ)
;;;--------------------------------

 Ciao Claudio
il probema non è se separato da virgola o spazio, ma aggiungere un commento
esempio punto 10 10 10 Spigolo


Ma guarda che il lisp di SePrAm fa esattamente quello che chiedi. Lui l'ha
chiamato CODICE e tu commento, ma sono la stessa cosa.
Basta che ti fai il tuo bel file dati nel formato "commento  x  y z"
Qui sotto ti allego lo stesso lisp con una piccola modifica. Al posto dello
spazio come separatore bisogna mettere la virgola in modo da poter usare
commenti contenenti anche spazi
(defun c:rotV ()
(if (not scala-txt)(setq scala-txt(getreal "\n Altezza delle scritte: ")))
(setq tipo(getint "\n Punti 2D o 3D <2/3>: "))
(setvar "cmdecho" 0)
(setq nomefile(getfiled "Selezionare il nome del File di punti" "" "txt" 4))
(setq nome-f(open nomefile "r"))
(setq conta 1)
(setq riga(read-line nome-f))
(while riga
(setq lriga(strlen riga))
(setq i 0)
(setq n "" x "" y "" z "")
(setq lett-chr ",")
(while (= lett-chr ",")(lett-car))
(setq n(strcat n lett-chr))
(while (/= lett-chr ",")(lett-car)(if (/= lett-chr ",")(setq n(strcat n
lett-chr))))
(princ "\r Attendere... inserimento punto n. ")(princ n)
(if (= conta 100) (progn
(command "_zoom" "_e" \r)
(setq conta 0)
)
)
(while (= lett-chr ",")(lett-car))
(setq x(strcat x lett-chr))
(while (/= lett-chr ",")(lett-car)(if (/= lett-chr ",")(setq x(strcat x
lett-chr))))
(while (= lett-chr ",")(lett-car))
(setq y(strcat y lett-chr))
(while (/= lett-chr ",")(lett-car)(if (/= lett-chr ",")(setq y(strcat y
lett-chr))))
(while (= lett-chr ",")(lett-car))


(princ "\n  Formato della riga: CODICE,X,Y,Z  separati da una virgola.")
(princ "\n <copyright: ing. Claudio Granuzzo 2001> ")
(princ "\n  Digitare ROTV per lanciare il programma!")
(princ)
;;;--------------------------------

Grazieeeeeeeeee

Grazieeeeeee