cg-Cad

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

LFL.LSP

Lisp »Tips 'n Tricks

Ultimo Aggiornamento_Last Update: 26 Giugno 2005