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
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
I seguenti utenti stanno leggendo questo Forum Qui c'è:
Pagina Successiva
Autore Discussione Precedente Discussione Discussione Successiva
Pagina: di 2

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 05 dicembre 2012 : 15:41:54  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
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.

MEM
Utente Master


Regione: Puglia
Prov.: Lecce
Città: Galatone


2235 Messaggi

Inserito il - 11 gennaio 2013 : 10:34:09  Mostra Profilo Invia a MEM un Messaggio Privato  Rispondi Quotando
Questo Text Deduplicator Plus e' veramente ottimo e pensavo risolvesse il mio problema, ma non e' cosi'.
Avrei bisogno di eliminare in un elenco.txt non solo i doppioni, ma anche gli originali in modo che restino solo le voci che sono state sempre singole.
Lista di partenza:
Pippo
Pippo
Pippo
Pluto
Topolino
Topolino
Minnie

Risultato:
Pluto
Minnie


Chi mi aiuta? Non riesco a trovare un programma adatto.

Modificato da - MEM in data 11 gennaio 2013 12:30:36
Torna all'inizio della Pagina

MEM
Utente Master


Regione: Puglia
Prov.: Lecce
Città: Galatone


2235 Messaggi

Inserito il - 14 gennaio 2013 : 10:00:28  Mostra Profilo Invia a MEM un Messaggio Privato  Rispondi Quotando
Ho l'impressione di essere ignorato...
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 14 gennaio 2013 : 10:14:08  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
Bah, si potrebbe provare il solito lisp "ad hoc"...
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 14 gennaio 2013 : 14:42:01  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
Ecco fatto, dimmi se funziona.
Il programma, abbastanza banale, non fa altro che prendere il file txt, convertirlo in una lista e costruire una nuova lista con gli elementi presenti singolarmente nella prima lista. A questo punto travaso finale della nuova lista in un file txt avente lo stesso nome del precedente con suffisso _NEW.
All'interno la funzione vl-position-t che restituisce tutte le posizioni di un certo elemento della lista (la funzione esistente vl-position mi dà solo la prima posizione di un elemento).

;;; Comando che elimina da un elenco txt tutti gli elementi non singoli

(defun C:ELIMDATI (/ datifile cartella intesto listatxt riga listatxt2 outtesto)
 (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)
 (setq listatxt2 '())

 (foreach elem listatxt
  (if (= (length (vl-position-t elem listatxt)) 1)
   (setq listatxt2 (cons elem listatxt2))
  )
 )

 (setq listatxt2 (reverse listatxt2)
       outtesto	(open (strcat cartella (vl-filename-base datifile) "_NEW.TXT") "w")
 )

 (foreach elem listatxt2
  (princ elem outtesto)
  (princ "\n" outtesto)
 )

 (close outtesto)
)

(princ "ELIMDATI - by Terminator - vers.1")
(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 contatore)
 (setq lista '())
 (setq contatore 0)
 (foreach elem	listan
   (if	(= elem elemento)
     (setq lista (append lista (list contatore)))
   )
   (setq contatore (1+ contatore))
 )
 lista
)


Torna all'inizio della Pagina

Giuseppe Mauro
Amministratore



Regione: Campania
Prov.: Napoli


2707 Messaggi

Inserito il - 14 gennaio 2013 : 18:23:01  Mostra Profilo Invia a Giuseppe Mauro un Messaggio Privato  Rispondi Quotando
Dopo quanti lisp, ci si candida alla santità ??
Torna all'inizio della Pagina

MEM
Utente Master


Regione: Puglia
Prov.: Lecce
Città: Galatone


2235 Messaggi

Inserito il - 15 gennaio 2013 : 10:23:12  Mostra Profilo Invia a MEM un Messaggio Privato  Rispondi Quotando
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.
Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 15 gennaio 2013 : 11:40:17  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
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:

Modificato da - arri in data 15 gennaio 2013 11:41:40
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 15 gennaio 2013 : 11:56:30  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
Ci risiamo...
Torna all'inizio della Pagina

MEM
Utente Master


Regione: Puglia
Prov.: Lecce
Città: Galatone


2235 Messaggi

Inserito il - 15 gennaio 2013 : 12:32:02  Mostra Profilo Invia a MEM un Messaggio Privato  Rispondi Quotando
Ragazzi, non capisco, all'inizio di cosa devo mettere (vl-load-com)?
Scusatemi ancora.
Torna all'inizio della Pagina

MEM
Utente Master


Regione: Puglia
Prov.: Lecce
Città: Galatone


2235 Messaggi

Inserito il - 15 gennaio 2013 : 12:59:25  Mostra Profilo Invia a MEM un Messaggio Privato  Rispondi Quotando
Ho copiato e incollato tutto al Command, ma il risultato e' sempre:
; error: no function definition: VL-POSITION-T
Dove sbaglio?
Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 15 gennaio 2013 : 13:15:54  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 15 gennaio 2013 : 13:18:52  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando


Scarica allegato:

elimdati.zip
1,08 KB
Torna all'inizio della Pagina

MEM
Utente Master


Regione: Puglia
Prov.: Lecce
Città: Galatone


2235 Messaggi

Inserito il - 15 gennaio 2013 : 13:31:48  Mostra Profilo Invia a MEM un Messaggio Privato  Rispondi Quotando
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.

Modificato da - MEM in data 15 gennaio 2013 13:32:24
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 15 gennaio 2013 : 14:26:33  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

joseph
Utente Master



Regione: Lombardia
Prov.: Cremona
Città: Casalmaggiore


1884 Messaggi

Inserito il - 16 gennaio 2013 : 11:18:51  Mostra Profilo Invia a joseph un Messaggio Privato  Rispondi Quotando
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)
)

Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 16 gennaio 2013 : 14:59:34  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
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.
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 16 gennaio 2013 : 16:43:01  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
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))
)
Torna all'inizio della Pagina

MEM
Utente Master


Regione: Puglia
Prov.: Lecce
Città: Galatone


2235 Messaggi

Inserito il - 18 gennaio 2013 : 13:03:59  Mostra Profilo Invia a MEM un Messaggio Privato  Rispondi Quotando
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.
Torna all'inizio della Pagina

joseph
Utente Master



Regione: Lombardia
Prov.: Cremona
Città: Casalmaggiore


1884 Messaggi

Inserito il - 18 gennaio 2013 : 13:55:27  Mostra Profilo Invia a joseph un Messaggio Privato  Rispondi Quotando
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).
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 18 gennaio 2013 : 15:49:11  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
@MEM

Prova a lasciarlo più tempo invece di un quarto d'ora.
Torna all'inizio della Pagina
Pagina: di 2 Discussione Precedente Discussione Discussione Successiva  
Pagina Successiva
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
Vai a:
TuttoCAD Forum © 2001-2010 CADLandia Torna all'inizio della Pagina
Pagina generata in 0,64 secondi.