Teoricamente dovrebbe essere più veloce. Invece di travasare gli elementi singoli nella nuova lista, semplicemente elimino gli elementi doppi dalla prima lista perché credevo che il foreach mi desse problemi se gli avessi sottratto elementi dalla lista mentre lavorava.
(defun C:ELIMDATI (/ datifile cartella intesto listatxt riga outtesto)
(vl-load-com)
(setq datifile (getfiled "Scegli il tuo file" "c:\\" "txt" 4)
cartella (strcat (vl-filename-directory datifile) "\\")
intesto (open datifile "r")
listatxt '()
)
(while (setq riga (read-line intesto))
(setq listatxt (cons riga listatxt))
)
(setq listatxt (reverse listatxt))
(close intesto)
(foreach elem listatxt
(if (> (length (vl-position-t elem listatxt)) 1)
(setq listatxt (vl-remove elem listatxt))
)
)
(setq outtesto (open (strcat cartella (vl-filename-base datifile) "_NEW.TXT") "w"))
(foreach elem listatxt
(princ elem outtesto)
(princ "\n" outtesto)
)
(close outtesto)
(princ)
)
(princ "ELIMDATI - by Terminator - vers.2")
(princ "\nDigitare ELIMDATI")
;;; ***************************FUNZIONE VL-POSITION-T*******************************
;;; Funzione che elenca le posizioni di un certo elemento in una lista
(defun vl-position-t (elemento listan / lista-p lung1 lung2)
(setq lista-p '()
lung1(length listan)
lung2(length listan)
)
(while (< (- lung1 lung2) lung1)
(if (vl-position elemento listan)
(setq lista-p (cons (+ (vl-position elemento listan)(- lung1 lung2)) lista-p))
)
(setq listan(cdr(member elemento listan)))
(setq lung2(length listan))
)
(setq lista-p(reverse lista-p))
)
PS: bellissima la progress bar, usata con successo nelle mie ultime realizzazioni!