AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TStringList.Find gibt nie True zurück

Ein Thema von Forlan · begonnen am 16. Mär 2009 · letzter Beitrag vom 7. Jun 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Forlan
Forlan

Registriert seit: 17. Feb 2008
Ort: Herford
265 Beiträge
 
Delphi 2007 Architect
 
#1

TStringList.Find gibt nie True zurück

  Alt 16. Mär 2009, 15:33
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
Marcel
マルセル
www.youtube.com/beethoven1990
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: TStringList.Find gibt nie True zurück

  Alt 16. Mär 2009, 15:36
Ich kann gerade nicht nachschauen, was macht denn TStringlist.Find? Ansonsten finde ich die Reihenfolge etwas suboptimal gewählt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#3

Re: TStringList.Find gibt nie True zurück

  Alt 16. Mär 2009, 15:37
...und was liefert IndexOf ?

...wenn IndexOf einen wert größer -1 leifert, ist der String in der Liste.
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Bbommel
Online

Registriert seit: 27. Jun 2007
Ort: Köln
652 Beiträge
 
Delphi 12 Athens
 
#4

Re: TStringList.Find gibt nie True zurück

  Alt 16. Mär 2009, 15:38
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
  Mit Zitat antworten Zitat
Benutzerbild von Forlan
Forlan

Registriert seit: 17. Feb 2008
Ort: Herford
265 Beiträge
 
Delphi 2007 Architect
 
#5

Re: TStringList.Find gibt nie True zurück

  Alt 16. Mär 2009, 15:38
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
Marcel
マルセル
www.youtube.com/beethoven1990
  Mit Zitat antworten Zitat
Benutzerbild von Forlan
Forlan

Registriert seit: 17. Feb 2008
Ort: Herford
265 Beiträge
 
Delphi 2007 Architect
 
#6

Re: TStringList.Find gibt nie True zurück

  Alt 16. Mär 2009, 15:39
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
Marcel
マルセル
www.youtube.com/beethoven1990
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#7

Re: TStringList.Find gibt nie True zurück

  Alt 16. Mär 2009, 15:41
Für unsortierte Listen eignet sich IndexOf, wie oben beschrieben.
Auch das muss man nicht in einer Schleife abfragen.
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: TStringList.Find gibt nie True zurück

  Alt 16. Mär 2009, 15:42
Richtig, IndexOf benutzt intern bereits eine Schleife.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Bbommel
Online

Registriert seit: 27. Jun 2007
Ort: Köln
652 Beiträge
 
Delphi 12 Athens
 
#9

Re: TStringList.Find gibt nie True zurück

  Alt 16. Mär 2009, 15:42
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...
  Mit Zitat antworten Zitat
Benutzerbild von Forlan
Forlan

Registriert seit: 17. Feb 2008
Ort: Herford
265 Beiträge
 
Delphi 2007 Architect
 
#10

Re: TStringList.Find gibt nie True zurück

  Alt 16. Mär 2009, 15:45
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
Marcel
マルセル
www.youtube.com/beethoven1990
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:17 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