AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

großes Textfile durchsuchen

Ein Thema von lord · begonnen am 11. Mai 2005 · letzter Beitrag vom 11. Mai 2005
Antwort Antwort
Benutzerbild von lord
lord

Registriert seit: 11. Mai 2005
Ort: Bonn
16 Beiträge
 
Delphi 7 Enterprise
 
#1

großes Textfile durchsuchen

  Alt 11. Mai 2005, 18:38
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.173 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: großes Textfile durchsuchen

  Alt 11. Mai 2005, 18:42
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 11. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: großes Textfile durchsuchen

  Alt 11. Mai 2005, 18:51
Sag bitte was genau suchtst du ? Ein bestimmtes Wort ?
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Benutzerbild von lord
lord

Registriert seit: 11. Mai 2005
Ort: Bonn
16 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: großes Textfile durchsuchen

  Alt 11. Mai 2005, 19:10
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: großes Textfile durchsuchen

  Alt 11. Mai 2005, 21:07
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
  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 13:09 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