Einzelnen Beitrag anzeigen

wth

Registriert seit: 17. Sep 2008
43 Beiträge
 
RAD-Studio 2009 Arc
 
#1

(sehr) große Datei SCHNELL nach mehreren Strings durchsuchen

  Alt 17. Nov 2008, 19:30
Hallo,

Ich habe eine große Datei (2 GB oder größer) und versuche gerade diese nach mehreren Zeichenketten zu durchsuchen.
Das ganze muss möglichst schnell sein.

So mache ich es bisher:

1. Lese ich einen Block aus der Datei. (~20000 Zeichen oder mehr; "BlockRead()")
2. Splitte/Explode ich diesen Block in ein String-Array mit dem Delimiter CRLF.
3. Sortiere ich das Array. ("Quicksort()")
4. Suche ich die Zeichenketten mittels einer Binären-Suche, da das Array ja sortiert ist. (das geht auch noch recht schnell)

Das Auslesen und das Suchen geht recht schnell, nur das Aufsplitten und das Sortieren des Arrays verbrauchen viel zu viel Zeit. (hauptsächlich wohl das Splitten)
Ich habe schon versucht den Block mit Pos() zu durchsuchen und die Datei zeilenweise auszulesen und zu vergleichen, ist aber beides einfach zu (viel) langsam.
Die Datei ist ganz einfach aufgebaut, jede Zeile eine Zeichenkette getrennt durch CRLF's.
Ich habe schon mehrere Split/Explode Varianten ausprobiert, auch die optimierte Version hier aus dem Forum.
Man kann die Datei auch nicht komplett in den Speicher laden, dafür ist sie zu groß.
Bisher lese ich die Datei mit den Pascal-Dateiroutinen, habe es aber auch schon mit FileStream versucht, ist aber genauso langsam.

Hat jemand noch ne Idee, wie das vielleicht schneller gehen könnte?

Danke schonmal.
  Mit Zitat antworten Zitat