TuttoCAD Forum

TuttoCAD Forum
[ Home | Registrati | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Album Fotografico | Download | | Cerca | FAQ ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 1 - TuttoCAD Software
 1 - Il forum sul software
 Freeware per eliminare linee di testo doppie

Nota: Devi essere registrato per poter inserire un messaggio.
Per registrarti, clicca qui. La Registrazione è semplice e gratuita!

Larghezza finestra:
Nome Utente:
Password:
Modo:
Formato: GrassettoCorsivoSottolineatoBarrato Aggiungi Spoiler Allinea a  SinistraCentraAllinea a Destra Riga Orizzontale Inserisci linkInserisci EmailInserisci FlashInserisci Immagine Inserisci CodiceInserisci CitazioneInserisci Lista
   
Icona Messaggio:              
             
Messaggio:

  * Il codice HTML è OFF
* Il Codice Forum è ON

Faccine
Felice [:)] Davvero Felice [:D] Caldo [8D] Imbarazzato [:I]
Goloso [:P] Diavoletto [):] Occhiolino [;)] Clown [:o)]
Occhio Nero [B)] Palla Otto [8] Infelice [:(] Compiaciuto [8)]
Scioccato [:0] Arrabbiato [:(!] Morto [xx(] Assonnato [|)]
Bacio [:X] Approvazione [^] Disapprovazione [V] Domanda [?]
Seleziona altre faccine

    
 
   

V I S U A L I Z Z A    D I S C U S S I O N E
arri Inserito il - 05 dicembre 2012 : 15:41:54
Text Deduplicator Plus is a utility for de-duplicating lines in a text file list.

Text De-duplication

This utility is especially useful for de-duplicating list of information to make them unique before importing into a database as lookup tables.
Sorting Lists

As a by-product of de-duplication list are also sorted into alphabetical order. If you wish to just sort a list without de-duplicating click the sort only button.

Totalling

If you wish to total up the number of each item in a list click count dupes. This will produce a totals list of the items in the list.
20   U L T I M E    R I S P O S T E    (in alto le più recenti)
Terminator Inserito il - 24 gennaio 2013 : 14:59:40
Infatti va bene su repeat e foreach, in cui ho un numero ben determinato di iterazioni. Con la funzione while la progress bar funziona comunque, anche se la percentuale ottenuta è piuttosto aleatoria.
GP Inserito il - 24 gennaio 2013 : 13:53:08
Messaggio inserito da arri

per sapere lo stato di avanzamento occorrerebbe inserire una progress bar



Bisogna però sapere in anticipo il numero delle iterazioni....
arri Inserito il - 24 gennaio 2013 : 12:55:14
Messaggio inserito da Terminator

PS: bellissima la progress bar, usata con successo nelle mie ultime realizzazioni!


Terminator Inserito il - 24 gennaio 2013 : 12:39:21
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!
MEM Inserito il - 23 gennaio 2013 : 15:18:08
Per il file da 50.000 voci circa 42 minuti, per un'altro da 78.000 un...po' di piu'

Grazie ancora.
arri Inserito il - 23 gennaio 2013 : 12:33:55
Messaggio inserito da Terminator

@MEM

Prova a lasciarlo più tempo invece di un quarto d'ora.


per sapere lo stato di avanzamento occorrerebbe inserire una progress bar

http://www.cadlandia.com/topic.asp?TOPIC_ID=13375
Terminator Inserito il - 18 gennaio 2013 : 15:49:11
@MEM

Prova a lasciarlo più tempo invece di un quarto d'ora.
joseph Inserito il - 18 gennaio 2013 : 13:55:27
Messaggio inserito da MEM ......
Quello che avete aggiunnto dopo con joseph non lo so usare.


La mia era solo una variante alla parte centrale della soluzione di Terminator; non fa niente di più.
Forse si dovrebbe confrontare la velocità dei due metodi (soprattutto su file da 50000 righe).
MEM Inserito il - 18 gennaio 2013 : 13:03:59
Grazie Terminator, solo oggi ho potuto testare elimdati.lsp.
Su un file di 60 righe ha lavorato egregiamente.
Su un file di 50.000 righe dopo un buon quarto d'ora l'ho fermato io.
Ripetero' la prova appena possibile e vi faro' sapere.

Quello che avete aggiunnto dopo con joseph non lo so usare.
Terminator Inserito il - 16 gennaio 2013 : 16:43:01
Ho provato ad intraprendere un'altra strada per sfruttare il vl-position esistente, questo è il risultato:

;;; 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))
)
Terminator Inserito il - 16 gennaio 2013 : 14:59:34
Bellissimo metodo, ottimo Jo!

Avevo intuito che forse c'era un modo di sfruttare il vl-position originale, ma alla fine mi sono rassegnato ad usare il metodo più grezzo.
joseph Inserito il - 16 gennaio 2013 : 11:18:51
Anche se il problema è già stato risolto, brillantemente e velocemente, vi allego questa funzione alternativa.
Ho solo sfruttato la riga di codice:
(apply 'append (subst nil......
che ho trovato sicuramente su qualche forum (ma purtroppo non ricordo più quale).
L'ho solo provata su liste, tipo quelle allegate; è da testare.

(defun dopp ()
(setq lista () lista-p ())
;(setq lista '("a" "r" "g" "t" "b" "a" "s" "r"))
(setq lista '(7 3 6 4 5 3 2 9 9 8 9 9 ))
(setq ll (length lista))
(while (>= ll 1)
(setq x (car lista))
(if (/= (vl-position x (cdr lista)) nil)
(setq lista (apply 'append (subst nil (list x) (mapcar 'list lista))))
(progn
(setq lista-P (cons x lista-p)
lista (cdr lista))
)
);if
(setq ll (length lista))
) ; while
(reverse lista-p)
)

Terminator Inserito il - 15 gennaio 2013 : 14:26:33
Messaggio inserito da MEM

Intanto... grazie.
Ho caricato il Lisp, ma compare subito:
ELIMDATI - by Terminator - vers.1; error: malformed list on input
poi dopo aver lanciato ELIMDATI e scelto il file txt contenente l'elenco:
; error: no function definition: VL-POSITION-T

Il mio elenco.txt e' del tipo:
staffa bulzen
staffa kroken
vite zanni
vite stender
ecc.


La lista e di circa 50000 righe.


Ehm...avevo dimenticato una parentesi all'ultimo princ e questo impediva il caricamento della funzione vl-position-t...

Scarica allegato:

elimdati.zip
1,1 KB
MEM Inserito il - 15 gennaio 2013 : 13:31:48
Intanto... grazie.
Ho caricato il Lisp, ma compare subito:
ELIMDATI - by Terminator - vers.1; error: malformed list on input
poi dopo aver lanciato ELIMDATI e scelto il file txt contenente l'elenco:
; error: no function definition: VL-POSITION-T

Il mio elenco.txt e' del tipo:
staffa bulzen
staffa kroken
vite zanni
vite stender
ecc.


La lista e di circa 50000 righe.
Terminator Inserito il - 15 gennaio 2013 : 13:18:52


Scarica allegato:

elimdati.zip
1,08 KB
arri Inserito il - 15 gennaio 2013 : 13:15:54
Messaggio inserito da MEM

Ho copiato e incollato tutto al Command, ma il risultato e' sempre:
; error: no function definition: VL-POSITION-T
Dove sbaglio?


attendi Terminator
MEM Inserito il - 15 gennaio 2013 : 12:59:25
Ho copiato e incollato tutto al Command, ma il risultato e' sempre:
; error: no function definition: VL-POSITION-T
Dove sbaglio?
MEM Inserito il - 15 gennaio 2013 : 12:32:02
Ragazzi, non capisco, all'inizio di cosa devo mettere (vl-load-com)?
Scusatemi ancora.
Terminator Inserito il - 15 gennaio 2013 : 11:56:30
Ci risiamo...
arri Inserito il - 15 gennaio 2013 : 11:40:17
Messaggio inserito da MEM

Non funziona.
Dopo aver lanciato ELIMDATI e selezionato il file TXT mi da questo errore:

; error: no function definition: VL-POSITION-T

Purtroppo non mi intendo di Lisp e non so interpretarlo.


all'inizio devi inserire

(vl-load-com)

http://www.cadlandia.com/topic.asp?TOPIC_ID=13749&SearchTerms=function,definition:

TuttoCAD Forum © 2001-2010 CADLandia Torna all'inizio della Pagina
Pagina generata in 0,21 secondi.