Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TStringList.Find gibt nie True zurück (https://www.delphipraxis.net/130952-tstringlist-find-gibt-nie-true-zurueck.html)

Forlan 16. Mär 2009 15:33


TStringList.Find gibt nie True zurück
 
Hallo zusammen..
Folgendes Problem:
Ich habe mir folgenden Quellcode überlegt, um zu prüfen ob eine Eingabe schon in meiner *.txt Datei vorhanden ist...

Delphi-Quellcode:
 List := TStringList.Create;
  if FileExists(ExtractFilePath(ParamStr(0))+'Words.txt') then
    begin
      List.LoadFromFile(ExtractFilePath(ParamStr(0))+'Words.txt');
      for j := 1 to List.Count-1 do
        begin
          k := j;
          if List.Find(Uppercase(tx),k) then
            begin
              ShowMessage('Wort bereits in Liste vorhanden!');
              break;
              List.Free;
              exit;
            end;
        end;
      try
        List.Free;
      finally

      end;
    end;
Jedoch wird nie ein Wort gefunden wenn es in der Datei vorhanden ist :?

Vielen Dank für euer Bemühen im vorraus ;)

DeddyH 16. Mär 2009 15:36

Re: TStringList.Find gibt nie True zurück
 
Ich kann gerade nicht nachschauen, was macht denn TStringlist.Find? Ansonsten finde ich die Reihenfolge etwas suboptimal gewählt.

Tyrael Y. 16. Mär 2009 15:37

Re: TStringList.Find gibt nie True zurück
 
...und was liefert IndexOf ?

...wenn IndexOf einen wert größer -1 leifert, ist der String in der Liste.

Bbommel 16. Mär 2009 15:38

Re: TStringList.Find gibt nie True zurück
 
Du musst dafür sorgen, dass die StringList sortiert ist, sonst funktioniert Find nicht (such also mal nach der Eigenschaft "sorted" in der Hilfe).

Außerdem brauchst du dann Find auch nicht in einer Schleife mehrfach aufrufen, sondern das durchsucht automatisch die ganze Liste.

Bis denn
Bommel

Forlan 16. Mär 2009 15:38

Re: TStringList.Find gibt nie True zurück
 
List.Find gibt eigentlich True zurück, wenn ein String, an meiner Stelle halt tx, an der stelle k vorhanden ist..
Und der Code wird auch noch überarbeitet, Stichwort: Subobtimale Reihenfolge ;)
Ich hab mir das ganze eben nur schnell überlegt :)

Forlan 16. Mär 2009 15:39

Re: TStringList.Find gibt nie True zurück
 
Zitat:

Zitat von Bbommel
Du musst dafür sorgen, dass die StringList sortiert ist, sonst funktioniert Find nicht (such also mal nach der Eigenschaft "sorted" in der Hilfe).

Außerdem brauchst du dann Find auch nicht in einer Schleife mehrfach aufrufen, sondern das durchsucht automatisch die ganze Liste.

Bis denn
Bommel

Danke, dass werde ich gleich mal versuchen :)

Tyrael Y. 16. Mär 2009 15:41

Re: TStringList.Find gibt nie True zurück
 
Für unsortierte Listen eignet sich IndexOf, wie oben beschrieben.
Auch das muss man nicht in einer Schleife abfragen.

DeddyH 16. Mär 2009 15:42

Re: TStringList.Find gibt nie True zurück
 
Richtig, IndexOf benutzt intern bereits eine Schleife.

Bbommel 16. Mär 2009 15:42

Re: TStringList.Find gibt nie True zurück
 
Zitat:

Zitat von Forlan
List.Find gibt eigentlich True zurück, wenn ein String, an meiner Stelle halt tx, an der stelle k vorhanden ist..

Das ist falsch. :) Find gibt dir true zurück, wenn tx in einer sortierten Liste vorhanden ist. Zusätzlich gibt dir Find noch die Stelle k zurück, an der der String gefunden wurde.

Du solltest indexOf benutzen, das funktioniert mit sortierten und unsortierten Listen (und nutzt auch die Vorteile von sortierten Listen). Oder die Liste sortieren... :)

Forlan 16. Mär 2009 15:45

Re: TStringList.Find gibt nie True zurück
 
Zitat:

Zitat von Tyrael Y.
Für unsortierte Listen eignet sich IndexOf, wie oben beschrieben.
Auch das muss man nicht in einer Schleife abfragen.

Super, mit IndexOf funktioniert es perfekt...
Vielen Dank :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:04 Uhr.
Seite 1 von 2  1 2      

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