Autor Beitrag
mexx
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: 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.


ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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.

ausblenden 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: Do 09.02.06 16:22 
Ach so, dann habe ich das Find völlig falsch verstanden! THX, euch beiden!
mexx Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: Do 09.02.06 17:07 
Wieso erhalte ich dann dabei ein Fehlermeldung?

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Do 09.02.06 18:44 
was denn für eine?

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
mexx Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: Fr 10.02.06 10:33 
Nein, wie konnte ich das übersehen. Ich danke Dir!!!

Aber die Sortierung ist noch verwirrend!
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Fr 10.02.06 20:47 
user profile iconmexx 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 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: Mo 13.02.06 08:51 
Achso, weil in der Hilfe steht einfach nur aufsteigend. Da vermutete ich von 0 bis >. THX