Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Auf riesige .txt dateien zugreifen (https://www.delphipraxis.net/107788-auf-riesige-txt-dateien-zugreifen.html)

o0o 2. Feb 2008 01:56


Auf riesige .txt dateien zugreifen
 
hi leutz, ich bin auf der suche nach einer moeglichkeit auf riesige .txt-dateien zugreifen zu koennen ohne dass das ewig mit dem laden dauert^^

also ich habe zum test jetzt 20mb txt dateien verwendet und bin zum entschluss gekommen dass wenn ein memo nicht bei zb 2gb die ich brauchen werde geeignet ist^^

weiss da jemand ne loesung?

also ich will die txt-dateien nicht bearbeiten,...also nur nach strings durchsuchen^^

da o0o

Neotracer64 2. Feb 2008 02:23

Re: Auf riesige .txt dateien zugreifen
 
Du kannst doch in Chunks arbeiten. Also immer einen Teil einlesen, durchsuchen und wieder freigeben, dann den nächsten Teil der Datei laden.

cruiser 2. Feb 2008 02:24

Re: Auf riesige .txt dateien zugreifen
 
dabei aber immer 2 Chunks im Speicher halten um den Suchstring auch dann zu finden, wenn er innerhalb der grenzen der Blöcke ist

o0o 2. Feb 2008 04:33

Re: Auf riesige .txt dateien zugreifen
 
ehm thx fuer die antwort^^

aber was ist ein chunk? ich hab ebn mal geschwind die sufu benutzt und dabei verwertbares nix gefunden.
koenntet ihr mal kurz erklaeren was das ist oder hab ihr ein tutorial dazu?

thx im vorraus...da o0o

alzaimar 2. Feb 2008 06:52

Re: Auf riesige .txt dateien zugreifen
 
Chunk = Bissen.

Nehmen wir an, du wilst einen String der Länge 100 suchen
Du lädst 1000 Zeichen ein und fängst an zu suchen. Wenn Du beim 901.Zeichen angelangt bist, schmeißt Du die ersten 900 Zeichen weg und lädst die nächsten 1000 Zeichen ans Ende des nun etwas reduzierten 'Chunks'. Nun hast Du 1100 Zeichen im Speicher und kannst weiter suchen. Immer wenn Du kurz vor dem Ende des 'Chunks' bist (also wenn deine Position < Länge - Suchtextlänge) ist, dann lädst Du den nächsten Bissen in den Speicher.

Wenn Du nach Wildcards suchst, geht das nicht so. Ich würde mir eine Funktion 'AdvanceFilePos' schreiben, die die Position eines virtuellen Zeigers in deiner Datei erhöht. Dabei prüft er jedes Mal, ob die Daten an dieser Position überhaupt geladen ist, lädt ggf. nach und verwirft die Teile, die bereits durchsucht wurden.

grenzgaenger 2. Feb 2008 07:13

Re: Auf riesige .txt dateien zugreifen
 
wenn du sie nicht bearbeiten willst, weshalb willste sie denn in ein memo laden? mal davon abgesehen, welcher anwender interessiert sich wirklich für 2GB text und kann hier noch den überblick behalten??? :drunken: :drunken:

wie wär es, die datei zeilenweise einzulesen und während du diese zeilenweise abarbeitest gleichzeitig zu durchsuchen und deine ergebnisobjekte für die weiterverarbeitung gleich wegstellst? hier sollten die schlüsselwörter assign, reset, readln weiterhelfen.

grüsse und noch einen schönen samstag
GG

christian_u 2. Feb 2008 07:50

Re: Auf riesige .txt dateien zugreifen
 
Nimm einfach die pascal Standartfunktionen dazu, das ist effizient und einfach.

var
f : TextFile;
tmp : string;

Assignfile(f,'meinedatei.txt');
reset(f);
while not eof(f) do
begin
readln(f,tmp);
end;
closefile(f);

marabu 2. Feb 2008 08:24

Re: Auf riesige .txt dateien zugreifen
 
Hallo,

geht es hier um die Programmierung einer effizienten Textsuche als Selbstzweck oder eher um das Durchsuchen großer Textmengen? Im letzteren Fall würde ich einfach ein existierendes Textwerkzeug wie GREP verwenden. Auch der Suchtypus spielt eine Rolle. Wird nur das erste Auftreten eines Strings gesucht oder alle? Soll der String vollständig gefunden werden oder wird ein komplexeres Suchmuster benötigt?

Freundliche Grüße

alzaimar 2. Feb 2008 08:43

Re: Auf riesige .txt dateien zugreifen
 
@christian_u: Wenn der Suchtext mehrere Zeilen umfasst, dann klappt das nicht.

o0o 2. Feb 2008 10:02

Re: Auf riesige .txt dateien zugreifen
 
Zitat:

Zitat von marabu
Hallo,

geht es hier um die Programmierung einer effizienten Textsuche als Selbstzweck oder eher um das Durchsuchen großer Textmengen? Im letzteren Fall würde ich einfach ein existierendes Textwerkzeug wie GREP verwenden. Auch der Suchtypus spielt eine Rolle. Wird nur das erste Auftreten eines Strings gesucht oder alle? Soll der String vollständig gefunden werden oder wird ein komplexeres Suchmuster benötigt?

Freundliche Grüße

also es geht um eine oder mehrere grosse log-dateien im txt format(ca2gb,...oder auch ein paar gb mehr^^)

also in dieser textdatei werden nur logcodes drinstehen und ein name dazu, also ungefaehr so:

Zitat:

dew87yweiuwe7dfw Peter
buy86d6h0gujh Martin
dazwischen wird nur eine leertaste sein, mehr nicht.
also in der logdatei muss dann nur noch nach exakt einem logcode gesuch werden und der name dazu ausgegeben werden. doppelte eintraege bestehen nicht.

da o0o


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:14 Uhr.
Seite 1 von 2  1 2      

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