Einzelnen Beitrag anzeigen

Benutzerbild von Michael Habbe
Michael Habbe

Registriert seit: 10. Aug 2005
264 Beiträge
 
Turbo Delphi für Win32
 
#16

Re: Prozedur zu langsam, Optimierung nötig

  Alt 12. Mär 2007, 13:28
Hi,

versuche doch einfach erstmal die Daten aus der Textdatei in eine Datenbank einzulesen, z. B. JvMemoryData von den JediVCL.

Hier mal mein Beispiel des Einlesens einer vorher gespeicherten Inventur:
Delphi-Quellcode:
procedure blablupp;
var
  F: TextFile;
  zeile: string;
  art, men, bez, ek, lag: string;
  errorcount: integer;
  k : array [1..6] of Integer;
  Posi: integer;
  lauf: integer;
  dat : string;
begin
  AssignFile(F, FileName);
  Reset(F);

  MemTbl.EmptyTable;
  while not eof(f) do
  begin
    ReadLn(f, Zeile);
    try
      // Bestimmung der Trennzeichenpositionen
      Posi:=1;
      for Lauf := 1 to length(Zeile) do
      begin
        if (Zeile[Lauf] = #9) then
        begin
          K[Posi] := Lauf;
          Inc(Posi);
        end;
      end;
      K[6] := Length(Zeile)+1;

      art := copy(Zeile, 1, K[1]-1);
      men := copy(Zeile, K[1]+1, K[2]-K[1]-1);
      bez := copy(Zeile, K[2]+1, K[3]-K[2]-1);
      ek := copy(Zeile, K[3]+1, K[4]-K[3]-1);
      dat := copy(Zeile, K[4]+1, K[5]-K[4]-1);
      lag := copy(Zeile, K[5]+1, K[6]-K[5]-1);
      MemTbl.Append;
      MemTblArtikelnummer.AsString := art;
      MemTblBezeichnung1.AsString := bez;
      MemTblEinkaufspreis.AsString := ek;
      MemTblMenge.AsString := men;
      MemTblZaehldatum.AsString := dat;
      MemTblLagerort.AsString := lag;
      MemTbl.Post;
    except
      inc(errorcount);
      MemTbl.Cancel;
    end;
  end;
  CloseFile(f);
end;
Wenn Du anschließend die Daten in der Tabelle hast, kannst Du mit TDataSet-Funktionen Deine Auswertung weiterlaufen lassen.

So wird die Datei jedenfalls nur ein einziges Mal angerührt.

mfg
Michael
  Mit Zitat antworten Zitat