Lisp »Tips 'n Tricks
»Come leggere un file-liste
Ecco come fare per passare ad una lista il contenuto di un file TXT strutturato come un elenco di liste.
Vincolo del lisp: il numero delle colonne (il numero degli elementi di ogni lista-riga) deve essere costante, cioè uguale per ogni lista-rigo del file dati TXT; e non deve essere minore di 3.
Inoltre il file deve avere il seguente formato-dati:
'(
(n0 n1 n2 n3 nn)
...
(n0 n1 n2 n3 nn)
)
cioè un elenco di liste con lo stesso numero di elementi racchiuso in una lista preceduta dal segno '.
LFL (legge file-liste)
LFL legge il file-liste DATI.TXT, salva il contenuto nella lista lista e quindi elabora la lista punto per punto.
;|
LFL.LSP (26 Giugno 2005)
Copyright (C) 2005 Claudio Piccini.
All rights reserved
www.cg-cad.com
Legge il file DATI.TXT
'(
(x y z)
...
(x y z)
)
e ne disegna i punti (x y z)
|;
(defun c:lfl ( / snapp ndir nf
NR NC
lista str
i j e punto
)
(setvar "cmdecho" 0)
(setq nDir (getvar "dwgprefix"))
(setq nf (strcat nDir "dati.txt"))
(setq lista (load nf))
(setq NR (length lista))
(setq str (strcat "\nnumero righe file=" (itoa NR)))
(princ str)
(setq NC (length (car lista)))
(setq str (strcat "\nnumero colonne file=" (itoa NC)))
(princ str)
(setq snapp (getvar "osmode"))
(command "_osnap" "_non")
(setq i 0)
(while (< i NR)
(setq j 0)
(while (< j NC)
(setq e (nth j (nth i lista)))
(setq punto (append punto (list e)))
(setq j (1+ j))
)
(if (= (length punto) 3)
(command "_point" punto)
(command "_point" (list (car punto)(cadr punto)(caddr punto)))
)
(setq punto nil)
(setq i (1+ i))
)
(setvar "osmode" snapp)
(command "_redraw")
(setvar "cmdecho" 1)
(princ)
)
;;;eof
|
Test del Lisp
DATI.TXT:
'(
(0 1 2 4 0.3 0.1 "primo")
(3 4 5 0.05 1 2 "secondo")
(0 0 0 1 1 1 "ok")
(1 1 1 0 0 0 "ko")
(1 2 3 3 2 1 "e questo e' l'ultimo")
)
Command: lfl
numero righe file=5
numero colonne file=7
Lisp »Tips 'n Tricks
Ultimo Aggiornamento_Last Update: 26 Giugno 2005
|