AGB  ·  Datenschutz  ·  Impressum  







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

Prozedur zu langsam, Optimierung nötig

Ein Thema von carknue · begonnen am 8. Mär 2007 · letzter Beitrag vom 18. Mär 2007
 
carknue

Registriert seit: 26. Mai 2005
37 Beiträge
 
Turbo Delphi für Win32
 
#1

Prozedur zu langsam, Optimierung nötig

  Alt 8. Mär 2007, 20:44
Hallo,

ich habe eine kleine Prozedur geschrieben, die aus einer GPS Text Datei für jede Koordinate den besten Messwert raussuchen soll und diesen in eine neue Datei schreiben soll. Meine angehängte Prozedur macht das auch ganz gut. Das Problem ist nur, dass diese Messdateien sehr groß sind, ca 100.000 Zeilen bei 4 Mb Größe. Mit solch großen Dateien dauert diese Prozedur mehrere Stunden auf durchaus aktueller Hardware. Meine Frage ist jetzt, wie könnte man diese Prozedur optimieren. Gleiche Koordinaten kommen in dieser Datei öfters vor, optimal wäre es, wenn im neuen File jede Koordinate wirklich nur 1 Mal stehen würde, mit natürlich dem besten Wert. Mit meiner Prozedur steht da diese Koordinate genau so oft, wie vorher drin aber wenigstens immer mit dem besten Wert. Hat jemand vielleicht ein e Idee?


Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var
  f,g,h: Textfile;
  zeile,rxl: string;
  suchkoor: string;
  Zeileg: string;
  Koor: Array[0..1000] of string;
  i,l,maxi: Integer;
  maxrxl: Integer;


begin
 Screen.Cursor:=crHourglass;
 DecimalSeparator:='.';
 AssignFile(f,OpenDialog1.FileName);
 Reset(f);
 readln(f,Zeile);
 AssignFile(g,OpenDialog1.FileName);
 Reset(g);
 readln(g,Zeileg);
 AssignFile(h,'C:\Best_Server.txt');
 rewrite(h);
 Writeln(h,'lon'+chr(9)+'lat'+chr(9)+'RXL'+chr(9)+'CID'+chr(9)+'BCCH');
 repeat
   readln(f,Zeile);
   suchkoor:=copy(Zeile,1,GetPosNumX(chr(9),Zeile,2)-1);
   reset(g);
   readln(g,Zeileg);
   i:=0;
   repeat
     readln(g,Zeileg);
     if pos(suchkoor,Zeileg)>0 then
     begin
       koor[i]:=Zeileg;
       i:=i+1;
     end;

   until EOF(g);
   maxrxl:=-200;
   maxi:=0;
   if i=1 then Writeln(h,koor[0])
   else
   begin
     for l := 0 to i - 1 do
     begin
       rxl:=copy(koor[l],GetPosNumX(chr(9),koor[l],2)+1,GetPosNumX(chr(9),koor[l],3)-GetPosNumX(chr(9),koor[l],2)-1);
       label11.Caption:=koor[l];
       label12.Caption:=inttostr(i);
       update;
       if strtoint(rxl)>maxrxl then
       begin
        maxrxl:=strtoint(rxl);
        maxi:=l;
       end;
     end;
     Writeln(h,koor[maxi]);

   end;

 until EOF(f);
 closefile(f);
 closefile(g);
 closefile(h);
 Screen.Cursor:=crDefault;
end;
  Mit Zitat antworten Zitat
 


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 07:35 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 by Thomas Breitkreuz