AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Record finden

Offene Frage von "TheCatcher"
Ein Thema von TheCatcher · begonnen am 16. Nov 2006 · letzter Beitrag vom 16. Nov 2006
Antwort Antwort
TheCatcher

Registriert seit: 28. Mär 2006
30 Beiträge
 
Delphi 5 Standard
 
#1

Record finden

  Alt 16. Nov 2006, 12:39
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
Gruss TheCatcher
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#2

Re: Record finden

  Alt 16. Nov 2006, 13:04
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. ) 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.
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  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 07:25 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