Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi großes Textfile durchsuchen (https://www.delphipraxis.net/45750-grosses-textfile-durchsuchen.html)

lord 11. Mai 2005 18:38


großes Textfile durchsuchen
 
hi,

Ich möchte ein (mehrere) Textfile(s) mit beliebiger länge (wobei es wohl in den meisten fällen mehrere tausend bis zu mehreren Millionen Zeilen werden) durchsuchen. Um das ganze performant durchzuführen dachte ich an die Verwendung von Threads. Allerdings hab ich da noch nicht allzu viel Erfahrung, von daher erübrigen sich einige Fragen.
Ein Thread für die Suche sollte, denke ich, auf jeden Fall verwendet werden, schließlich kann man dann schon die Ergebnisse im ListView ansehen während die Suche noch läuft.

Ich dachte dabei bis jetzt daran den Threads ziemlich gleich große Stapel zu geben die sie dann unabhängig voneinander abarbeiten. Also zum Beispiel:
Thread 1: Zeile 1 bis 10000
Thread 2: Zeile 10001 bis 20000
Thread 3: Zeile 20001 bis 30000 usw.

1. Sind (mehrere) Threads für dieses Problem überhaupt sinnvoll?

2. Wie greife ich am sinnvollsten und effektivsten von den Threads auf das Textfile zu? Bequem wäre es sicher eine TStringList zu verwenden (die ist auch recht schnell) allerdings muss ja jeder Thread dann das ganze File in seine StringList laden und durchsucht dann nur einen Teil davon! Oder wäre es besser/bzw. (überhaupt) möglich, eine TStringList zu verwenden?


Für Anregungen/Hinweise/Tips schonmal vielen Dank schonmal im Vorraus
lord

Bernhard Geyer 11. Mai 2005 18:42

Re: großes Textfile durchsuchen
 
Lese die Zeile zeilenweise ein und suche deine gewünschten Infos.
TStringlist wird aufgrund des evtl. nötigens Speichers unpassenden sein.
Auslagern in Thread ist evtl. kontraproduktiv, da bei solch einer Aktion das limitierende Element die Festplattengeschwindigkeit ist und diese vermutlich sinken würde wenn du gleichzeitig an verschiedenen Stellen der Datei lesen würdest.

sniper_w 11. Mai 2005 18:51

Re: großes Textfile durchsuchen
 
Sag bitte was genau suchtst du ? Ein bestimmtes Wort ?

lord 11. Mai 2005 19:10

Re: großes Textfile durchsuchen
 
Zitat:

Zitat von sniper_w
Sag bitte was genau suchtst du ? Ein bestimmtes Wort ?

Ich suche einen Teil der Zeile

könnte bspw. so aussehen

000 ~ ABC ^ DEFG ~ ABC ^ DEFG

Interessant dabei ist es die Felder zu bekommen die durch "~" getrennt sind.

Danke schonmal für die 2 Antworten

mfg lord

marabu 11. Mai 2005 21:07

Re: großes Textfile durchsuchen
 
Zitat:

Zitat von lord
000 ~ ABC ^ DEFG ~ ABC ^ DEFG

Interessant dabei ist es die Felder zu bekommen die durch "~" getrennt sind.

Respekt, du lässt ja wirklich alles offen bei deiner Problembeschreibung. Eingangs sprichst du vom Suchen in den Zeilen einer Textdatei, jetzt habe ich eher den Verdacht, dass es sich um Datensätze mit Feldstruktur handelt. Da brauchst du schon unterschiedliche Ansätze für den Parser. Aber wenn die eigentliche Frage die nach der optimalen Anzahl von Threads ist, so bin auch ich der Meinung, dass es sich hier um ein Standardproblem mit einem main thread für das user interface und einem worker thread für den Parser handelt. Mehrere worker threads machen wohl nur Sinn, wenn die Daten über verschiedene i/o Kanäle kommen. Der parser muss im streaming mode arbeiten, ein komplettes Einlesen der Daten verbietet sich von selbst bei den Datenmengen. Im user interface werden sicher nur verdichtete Informationen angezeigt.

Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:29 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