AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Große Text Datei sortieren + doppelte Einträge löschen
Thema durchsuchen
Ansicht
Themen-Optionen

Große Text Datei sortieren + doppelte Einträge löschen

Ein Thema von Win32.API · begonnen am 18. Dez 2005 · letzter Beitrag vom 18. Dez 2005
Antwort Antwort
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#1

Re: Große Text Datei sortieren + doppelte Einträge löschen

  Alt 18. Dez 2005, 18:47
Zitat von Delphi-Freak:
Frage noch an den Unwissenden, der seinem Namen irgenwie nicht ganz treu bleibt
wie meinst du, einen Teil nach dem anderen sortieren, dann hast du ja z. B. wenn du HAEDFCBG als HAED und FCBG einzeln sortierst nachher ADEHBCFG und nicht ABCDEFGH?
Ach, meine Name passt schon zu mir.

Hab es glaube ich nur nicht weit genug ausformuliert, aber Mergesort macht ja eigentlich nichts anderes als zwei Teilfelder zu sortieren und dann die sortierten Teilfelder in einer neuen Sortierung zusammen zu fügen. Damit würde aus HAED -> ADEH und aus FCBG -> BCFG werden, dann schaut man ist A < B, D < B, D < C, ... und fügt immer das kleinere in die resultierende Liste ein.

Und im Prinzip würde ich es nicht viel anders machen als du. Man liest ein recht kleinen Teil aus der Datei aus, extrahiert hier die Zeilen (also nach Zeilenende) und sortiert diese Zeilen dann beliebig (also hier kann es wirklich jeder Algorithmus sein). Das ganze macht man halt mit der ganzen Datei.
Nun hat man mehrere sortierte Teilfelder (die man z.B. wieder in eine Datei zurückschreiben kann). Jetzt mischt man á la Mergesort, man nimmt je zwei von den Teilsortierten Feldern jeweils eine kleine Teilmenge und schreibt die sortiert in eine neue Datei, dann den nächsten Haufen der beiden Dateien, ...
Da die jeweils schon sortiert waren, klappt das auch. Allerdings darf man natürlich nicht mehr einfach den Rest eines Arrays anfügen, wenn das zweite Array leer ist (die Datei aus der die leere Datei stammt könnte noch weitere Daten enthalten, die kleiner sind als Elemente des noch nicht leeren Arrays). Hoffe ist halbwegs klar was ich meine.

Was Geschwindigkeit angeht, so ist die sicherlich nicht so hoch, aber das liegt dann doch eher an den vielen Zugriffen auf die Festplatte, die sich bei solchen Datenmengen eher nicht vermeiden lässt.

Gruß Der (zurecht so benannte) Unwissende

[edit]Mal noch ein PS
Es macht natürlich Sinn, nach dem ersten Einlesen und Sortieren die Länge der Strings zu merken und mit abzuspeichern, dann entfällt bei jedem weiteren Durchlauf das ineffiziente Suchen nach dem Zeilenende.
[/edit]
  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:53 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