Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Record finden (https://www.delphipraxis.net/80849-record-finden.html)

TheCatcher 16. Nov 2006 11:39


Record finden
 
Hallo

habe folgenden Code:



Delphi-Quellcode:
type
  TArtRec = record
    ID: Integer;
    D1: string;
    D2: string;
  end;
var
  ArtArr: array of TArtRec;

beim Starten des Programmes erfolgt :
Delphi-Quellcode:
    sl.LoadFromFile('whh_2.csv');
    SetLength(ArtArr, sl.count);


    for i := 0 to sl.count - 1 do
    begin
      tea := Explode(';', sl.Strings[i]);

      if IsStringInteger(tea[0]) = true then
        ArtArr[i].id := StrToInt(tea[0])
      else
        ArtArr[i].id := i;
      ArtArr[i].d1 := tea[1];
      ArtArr[i].d2 := tea[2];
    end;

soweit so gut funktioniert alles..
Aber nun möchte ich in einem Edit feld eine zahl eingeben diese ist gleich dem Feld ID.. - hab cih so gelöst!

Delphi-Quellcode:
procedure TWK_Form.onrChange(Sender: TObject);
var
  i: Integer;
begin
  if not (onr.text = '') then
  begin
    for i := 0 to allcnt - 1 do begin
      if (ArtArr[StrToInt(onr.text)].ID = StrToInt(onr.text)) then
        begin
          artikel_label.Caption := ArtArr[i].d1;
          preis_label.Caption := ArtArr[i].d2;
        end;
    end;
  end;
end;
Allerdings habe ich dann für einige Sekunden nee völlige System Auslastung (Programm friert ein) (gerade mal 300 Datensätze im record)... wo hab ich da wohl nun meinen denkfehler bzw. zu kompliziert gearbeitet? Danke Euch

Panthrax 16. Nov 2006 12:04

Re: Record finden
 
Hallo TheCatcher.

Ich fürchte die von dir angewendete Methode ist doch etwas aufwendig. (Das ist das was dir dein Rechner versucht mitzuteilen, wenn er kurz einfriert. :mrgreen: ) Du kanst mehrere Möglichkeiten deinen Algorithmus performanter zu gestalten:
  • versuche immer alles "nur einmal" zu machen: es bspw. ist unnötig StrToInt(onr.text) mehrfach durchzuführen
  • beende zu suchen, wenn du dein Ergebnis hast: in for I:= ... do ermittelst du nur einen Ergebnissatz (if ID = ...) vergleichst aber weiter mit den restlichen Daten
  • optimiere deine Liste mit einem Index: du könntest bspw deine Liste sortieren um gezielt darin suchen zu können oder erstellst dir eine separate, sortierte Liste (einen Index) für deine Daten, den du darfür verwenden kannst.
Diese Schritte sollten dir helfen dein Ergebnis in weniger als 0,3s für deine 300 Datensätze zu finden.

Gruß,
Panthrax.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz