![]() |
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:
Jedoch wird nie ein Wort gefunden wenn es in der Datei vorhanden ist :?
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; Vielen Dank für euer Bemühen im vorraus ;) |
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.
|
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. |
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 |
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 :) |
Re: TStringList.Find gibt nie True zurück
Zitat:
|
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. |
Re: TStringList.Find gibt nie True zurück
Richtig, IndexOf benutzt intern bereits eine Schleife.
|
Re: TStringList.Find gibt nie True zurück
Zitat:
Du solltest indexOf benutzen, das funktioniert mit sortierten und unsortierten Listen (und nutzt auch die Vorteile von sortierten Listen). Oder die Liste sortieren... :) |
Re: TStringList.Find gibt nie True zurück
Zitat:
Vielen Dank :thumb: |
Re: TStringList.Find gibt nie True zurück
Delphi-Quellcode:
Das geht sicher nicht! Eine Liste lässt sich nur aus einer Datei laden, in die mit List.SaveToFile eine Liste gespeichert wurde. Ich tippe mal, dass deine Liste leer bleibt.
List.LoadFromFile(ExtractFilePath(ParamStr(0))+'Words.txt');
Willst Du Testen, ob ein Wort in einer Textdatei vorhanden ist, musst do eine Wortliste der Datei erstellen. Was soll das Uppercase in
Delphi-Quellcode:
if List.Find(Uppercase(tx),k) then
|
Re: TStringList.Find gibt nie True zurück
1. Wenn die Datei nicht existiert, gibst du die angelegte StringList niemals frei.
2. Der Try/finally Block ist völlig falsch angewendet 3. List.Free bringt nach einem Break; überhaupt nix, da das Break die (innere) Schleife sofort verlässt 4. Das Exit dementsprechend ist genauso sinnlos. 5. Break verlässt nur die innere Schleife, d.h. in der äusseren macht er mit dem nächsten Durchlauf weiter... |
Re: TStringList.Find gibt nie True zurück
Zitat:
Bis denn Bommel |
Re: TStringList.Find gibt nie True zurück
Zitat:
Nach denen hat er wohl nicht gesucht. Wenn ich ihn richtig verstanden habe, sucht er nach einzelnen Worten. |
Re: TStringList.Find gibt nie True zurück
Dies wiet aber eher auf eine Nichinstantiierung des StringList-Objektes hin.
Es sollte so aber jede beliebige Textdatei eingelesen werden können. |
Re: TStringList.Find gibt nie True zurück
Zitat:
|
Re: TStringList.Find gibt nie True zurück
Zitat:
Aus der Delphi-Hilfe (TDE 2006) Zitat:
|
Re: TStringList.Find gibt nie True zurück
Zitat:
Zitat:
|
Re: TStringList.Find gibt nie True zurück
OK, ich glaube, das hätten wir jetzt geklärt, kommen wir zum eigentlichen Problem zurück. ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz