AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Problem mit großer Textdatei

Ein Thema von PeSch · begonnen am 9. Jan 2012 · letzter Beitrag vom 12. Jan 2012
 
PeSch

Registriert seit: 9. Jan 2012
6 Beiträge
 
#1

Problem mit großer Textdatei

  Alt 9. Jan 2012, 15:58
Hallo Leute,

Bin neu im Forum und weiss nicht ob ich hier in der richtigen Kategorie bin.

Vorab: Suchfunktion habe ich schon benutzt, was ich gefunden habe reicht mir nicht .

Folgendes Problem: ich habe eine sehr große Text-Datei (.txt) (rund 260MB), die ich durchsuchen will. Im wesentlichen enthält die abermillionen von Zeilen mit Messdaten und zwischendrin immer mal einige Strings wie bspw. "Frame". Nach jenen möchte ich suchen und mir die Zeile ausgeben lassen in der Sie sich befinden. Wie lange die Suche dauert bzw. wie effizient sie ist, spielt für mich keine Rolle. Obs nun 5min oder 20min dauert, völlig egal, hauptsache ich muss nichts per Hand machen .

Der Code:

Code:
var
Dateipfad: String;
FrameNumber,i,j: Integer;
Datensatz :TStringList;
Positionen: Array of Integer;
Abstaende: Array of Integer;

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
    FrameNumber:=StrToInt(Edit2.text);
    Dateipfad:=Edit1.text;
    Datensatz:=TStringList.create;
    Datensatz.LoadFromFile(Dateipfad);
    SetLength(Positionen,FrameNumber+1);

    For i:=1 To Datensatz.Count-1 Do
        Begin
           If Pos('Frame',Datensatz.Strings[i])>0 Then
           Begin
           Positionen[i]:=i;
           ListBox1.Items.Add(IntToStr(Positionen[i]));
           End;
        end;


    Datensatz.free;
end;

end.
Was ich in eurer Hilfe und im Forum schon gelesen habe, ist dass TStringList nicht grad die effizienteste und eleganteste Lösung ist, aber die am einfachsten verständliche und das reicht mir vollkommen. Nun zum Problem: Der Code funktioniert bei kleineren Dateien einwandtfrei, bspw bei 15MB. Bei den großen kommt immer eine Fehlermeldung nach gewisser Zeit, warum weiss ich nicht. Wenn die Fehlermeldung kommt wird das Programm im Arbeitsspeicher RIESIG...das nimmt erst alle paar Sekunden um ca 50MB zu, bis die Größe der Text-Datei erreicht ist + Eigengröße. Dann tut sich eine Zeit lang nichts und dann explodiert die Größe im RAM auf etwas über 1GB und dann kommt der error: "Access violation". Ich nutze Lazarus, hoffe das ist im Delphi-Forum kein Problem.


Wäre wirklich froh, wenn mir jemand helfen könnte.

MfG

Peter


P.S.: Das Problem hängt nicht vom OS ab, tritt bei Win7 und WinXP auf.
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 22:25 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