![]() |
Doppelte Einträge in Textdatei löschen
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?
|
Re: Doppelte Einträge in Textdatei löschen
Hi!
Lade alle Zeilen in eine Stringlist, sortiere sie und überprüfe nur noch, ob 2 aufeinanderfolgende Einträge gleich sind Ciao Frederic |
Re: Doppelte Einträge in Textdatei löschen
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. |
Re: Doppelte Einträge in Textdatei löschen
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 |
Re: Doppelte Einträge in Textdatei löschen
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! |
Re: Doppelte Einträge in Textdatei löschen
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 |
Re: Doppelte Einträge in Textdatei löschen
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.
|
Re: Doppelte Einträge in Textdatei löschen
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz