Autor |
Beitrag |
mexx
      
Beiträge: 1183
|
Verfasst: Do 09.02.06 14:39
Wenn folgende Source zum Suchen eines Eintrages verwendet werde kann, wieso muss man dabei einen Index angeben. Als Ergebnis erhalte ich (ListBox1.Items.Count - 1)mal das Ergebnis. Das bedeutet doch, dass der Eintrag unabhängig von dem i gefunden wurde. Demnach wäre es doch garnicht notwendig.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| Liste.Sort; for i:=0 to ListBox1.Items.Count - 1 do begin IF (Liste.Find(Edit1.Text,i)) then begin Memo1.Lines.Append(Liste.Strings[i] + ' Index: ' + IntToStr(i)); end; end; Liste.Free; |
Anbei die Source im gesamten.
Einloggen, um Attachments anzusehen!
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Do 09.02.06 15:57
Schau mal in die Hilfe, was Find genau macht. Das schaut nämlich nicht nach, ob an Position i der String steht, sondern er findet die Position, an der man den String einfügen sollte. Das Ergebnis der Funktion (True/false) gibt an, ob der String schon in der Liste ist, oder ob er noch nicht drin ist.
Der angegebene Index dient also dazu, die Einfügestelle zu bestimmen. Der Unterschied zu IndexOf ist der, dass Find wesentlich schneller arbeiten dürfte, und hierbei zwei Ergebniswerte von Interesse sind.
_________________ We are, we were and will not be.
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Do 09.02.06 16:05
Hallo
du bist nicht zufälligerweise auf die Idee gekommen, in die OH zu schauen?
der Index ist ein Var parameter und gibt dir den gefundenen Index zurück. die äußere Schleife ist unnötig.
Delphi-Quelltext 1: 2: 3: 4: 5:
| Liste.Sort; IF (Liste.Find(Edit1.Text,i)) then begin Memo1.Lines.Append(Liste.Strings[i] + ' Index: ' + IntToStr(i)); end; |
Die Liste freigeben ist auch kein gute idee. Du kämst besser, wenn du es so machst:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm1.Button3Click(Sender: TObject); var i: integer; Liste: TStringlist; begin IF Edit1.text > '' then begin Liste:=TStringList.Create; try liste.Assign(ListBox1.Items); Liste.Sort; IF (Liste.Find(Edit1.Text,i)) then Memo1.Lines.add(Liste.Strings[i] + ' Index: ' + IntToStr(i)); finally liste.free; end; end; end; |
das freigeben und erstellen der Liste in 2 Proceduren, die dazu noch mehrfach aufgerufen werden können, würde ich vermeiden
Eidt: mist, zu langsam
Mfg Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
mexx 
      
Beiträge: 1183
|
Verfasst: Do 09.02.06 16:22
Ach so, dann habe ich das Find völlig falsch verstanden! THX, euch beiden!
|
|
mexx 
      
Beiträge: 1183
|
Verfasst: Do 09.02.06 17:07
Wieso erhalte ich dann dabei ein Fehlermeldung?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| IF Edit1.text > '' then begin Liste.Sort;
IF (Liste.Find(Edit1.Text,i)) then begin Memo1.Lines.Append(Liste.Strings[i] + ' Index: ' + IntToStr(i)); end;
Liste.Free; end; |
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Do 09.02.06 18:44
was denn für eine?
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
mexx 
      
Beiträge: 1183
|
Verfasst: Fr 10.02.06 09:28
Zugriffsverletzung bei Adresse...
Das erste Suchergebnis wird richtig gefunden, aber beim zweiten Versuch kommt die Fehlermelduung.
Ich lege mal das Teil bei. Was mich ebenso verwundert, ist das unregelmässige Sortieren nach dem Sort-Befehl. Es nicht, wie in der Hilfe beschrieben, aufsteigend.
Einloggen, um Attachments anzusehen!
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Fr 10.02.06 10:30
Och. Es kommt ne Fehlermeldung, wenn man auf ne Liste zugreift, die man kurz vorher mit free; zerstört hat? Komisch. 
_________________ We are, we were and will not be.
|
|
mexx 
      
Beiträge: 1183
|
Verfasst: Fr 10.02.06 10:33
Nein, wie konnte ich das übersehen. Ich danke Dir!!!
Aber die Sortierung ist noch verwirrend!
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Fr 10.02.06 20:47
mexx hat folgendes geschrieben: |
Aber die Sortierung ist noch verwirrend! |
die liste wird alphabetisch sortiert, nicht nach dem dahinterstehenden zahlenwert.
2,10,1 nach alphabet sortiert ist nunmal 1,10,2
Mfg Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
mexx 
      
Beiträge: 1183
|
Verfasst: Mo 13.02.06 08:51
Achso, weil in der Hilfe steht einfach nur aufsteigend. Da vermutete ich von 0 bis >. THX
|
|