AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Doppelte Einträge in Textdatei löschen
Thema durchsuchen
Ansicht
Themen-Optionen

Doppelte Einträge in Textdatei löschen

Ein Thema von Pseudemys Nelsoni · begonnen am 9. Nov 2004 · letzter Beitrag vom 9. Nov 2004
Antwort Antwort
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Doppelte Einträge in Textdatei löschen

  Alt 9. Nov 2004, 17:19
OK, wie man es macht weiss ich, nur ist das nicht die eleganteste lösung...ich habe das bisher immer so gemacht, das ich für jede einzelne zeile die komplette datei durchgegangen bin um nach doppelten einträgen zu schauen und sie ggf. zu löschen... nur wären das bei 10.000 einträgen schon bis zu 10.000*10.000= 100.000.000 millionen prüfungen.... gibt es eine schnellere alternative?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#2

Re: Doppelte Einträge in Textdatei löschen

  Alt 9. Nov 2004, 17:28
Hi!

Lade alle Zeilen in eine Stringlist, sortiere sie und überprüfe nur noch, ob 2 aufeinanderfolgende Einträge gleich sind


Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
czapie

Registriert seit: 17. Nov 2002
Ort: Berlin
384 Beiträge
 
Delphi 5 Standard
 
#3

Re: Doppelte Einträge in Textdatei löschen

  Alt 9. Nov 2004, 17:54
Hallo,

Frederic ich bin mir nicht sicher, ob das wirklich schneller ist.
Aber du könntest:
Bei der 1. Zeile anfangen und gucken ob gleiche vorhanden bis Zeile n.
Dann von 2. Zeile bis n.
usw.

Das entspricht einem Maximalaufwand (also n unterschiedliche Zeilen) von
0,5n * (n+1) = 0,5n^2 + 0,5n

Und das ist zwar von der Komplexität immer noch quaratisch, aber nicht mehr
ganz n^2 wie du erläutert hast.

Um auf Frederic nochmal einzugehen:
Es wäre möglich einen Sortieralgorithmus, der z.B. eine logarithmische Komplexität hat, derartig zu modifizieren, das beim Vergleich zweier Zeilen während des Sortierens, bei gleichen Zeilen schon gelöscht wird?!

Czapie.
Was man zu verstehen gelernt hat, fürchtet man nicht mehr.
(Marie Curie)
http://www.cafes-in-berlin.com
  Mit Zitat antworten Zitat
rookied5
(Gast)

n/a Beiträge
 
#4

Re: Doppelte Einträge in Textdatei löschen

  Alt 9. Nov 2004, 18:00
Die Textdatei zeilenweise in eine (unsortierte) Listbox übernehmen und vor dem Übernehmen (add) überprüfen, ob die Zeile schon drin ist (irgendwas mit ItemIndex = -1 war das, glaube ich).

Danach den Inhalt der Listbox wieder zeilenweise in die Textdatei (rewrite) zurückschreiben, falls die Doubletten rausfliegen sollen.

Das sollte etwas schneller gehen.
Bei der Listbox kannst Du visible auf false setzen.

mfg
  Mit Zitat antworten Zitat
czapie

Registriert seit: 17. Nov 2002
Ort: Berlin
384 Beiträge
 
Delphi 5 Standard
 
#5

Re: Doppelte Einträge in Textdatei löschen

  Alt 9. Nov 2004, 18:11
Wie kann man prüfen, ob ein Eintrag schon vorhanden ist?

Nächste Frage wäre, wie schnell diese Überprüfung läuft,
denn das ist ja eigentlich nur eine Verlagerung des
Problems, der Aufwand bleibt ja!
Was man zu verstehen gelernt hat, fürchtet man nicht mehr.
(Marie Curie)
http://www.cafes-in-berlin.com
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#6

Re: Doppelte Einträge in Textdatei löschen

  Alt 9. Nov 2004, 18:15
Hi allerseits,

nach kurzer Überlegung ist eines klar: die Methode von rookied5 ist sicher langsam. IndexOf läuft ja auch nur alle Elemente in einer Schleife durch. IMHO ist es da wirklich einfacher, die textdatei in eine StringList zu laden (mit DelimitedText), zu sortieren und dann einmal über die Liste drüberzufahren und doppelte Elemente rauszuwerfen.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#7

Re: Doppelte Einträge in Textdatei löschen

  Alt 9. Nov 2004, 18:18
das ganze nich in ner ListBox machen, sondern in einer StringList (oder beliebigen nichtvisuellen Komponente). Das sollte die Sache schon seeeehr stark beschleunigen. Wahrscheinlich so stark, dass alle anderen Optimierungen überflüssig werden.
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
czapie

Registriert seit: 17. Nov 2002
Ort: Berlin
384 Beiträge
 
Delphi 5 Standard
 
#8

Re: Doppelte Einträge in Textdatei löschen

  Alt 9. Nov 2004, 18:24
Hallo,

ich glaube, das dieses Problem ungelöst von Komponenten und Datenstrukturen betrachtet werden kann.
Es ist reine Algorithmik.
@alcaeus:
Aber auch das Sortieren, hat einen Aufwand, und wenn dieser plus, das hin und her schreiben dem Überprüfen in der Datei gleichkommt macht es keinen Sinn.
Was man zu verstehen gelernt hat, fürchtet man nicht mehr.
(Marie Curie)
http://www.cafes-in-berlin.com
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz