Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi tstringlist öfter durchlaufen (https://www.delphipraxis.net/57199-tstringlist-oefter-durchlaufen.html)

Tigermoon 17. Nov 2005 07:44


tstringlist öfter durchlaufen
 
Morgen

wie kann ich den befehlt

STringlist.indexof()
öfter benutzen in der selben datei?

Ich meine den eintrag den ich suche kann es mehrmals geben
aber dieser befehl hört nach beim ersten ma auf

Tigermoon

marabu 17. Nov 2005 07:48

Re: tstringlist öfter durchlaufen
 
Moin.

Wie wäre es mit einer Zählschleife FOR ... TO ... DO?

Grüße vom marabu

mschaefer 17. Nov 2005 07:56

Re: tstringlist öfter durchlaufen
 
Moin, moin,

lauf doch die StringList.Strings[i] von 0 bis Pred(Count) selbst durch.

PS : mit der Schleife von Marabu (war schneller : Guten Morgen !)

Grüße // Martin

Sharky 17. Nov 2005 08:27

Re: tstringlist öfter durchlaufen
 
Oder einfach die Klasse etwas erweitern:
Delphi-Quellcode:
  TExStringList = class(TStringList)
    constructor Create;
    destructor Destroy; override;
  private
    fLastMatch: integer;
    fSearchKey: string;
  public
    function FindFirst(aValue: string): integer;
    function FindNext: integer;
  end;

implementation

{ TexStringList }

constructor TExStringList.Create;
begin
  fLastMatch := -1;
  inherited;
end;

destructor TExStringList.Destroy;
begin
  inherited;
end;

function TExStringList.FindFirst(aValue: string): integer;
begin
  fSearchKey := aValue;
  fLastMatch := IndexOf(fSearchKey);
  Result := fLastMatch;
end;

function TExStringList.FindNext: integer;
var
  ndx: integer;
begin
  Result := -1;
  for ndx := Succ(fLastMatch) to Pred(GetCount) do
  begin
    if CompareStrings(Get(ndx), fSearchKey) = 0 then
    begin
      fLastMatch := ndx;
      Result := fLastMatch;
      Exit;
    end;
  end;
end;
Und dann zum Beispiel so verwenden:
Delphi-Quellcode:
procedure TDemoForm.btn_Button1Click(Sender: TObject);
var
  sl: TExStringList;
  findindex: integer;
begin
  sl := TexStringList.Create;
  try
    sl.Add('blubb');
    sl.Add('meow');
    sl.Add('blubb');
    sl.Add('blubb');
    sl.Add('meow');
    sl.Add('blubb');
    lb_ListBox1.Clear; // Zum Test gebe ich den Index in einer TListBox aus.

    findindex := sl.FindFirst('blubb');
    while findindex > -1 do
    begin
      lb_ListBox1.Items.Add(IntToStr(findindex));
      findindex := sl.FindNext;
    end;
  finally
    sl.Free;
  end;
end;

RavenIV 17. Nov 2005 08:34

Re: tstringlist öfter durchlaufen
 
Zitat:

Zitat von mschaefer

lauf doch die StringList.Strings[i] von 0 bis Pred(Count) selbst durch.

mal ganz dumm gefragt:
was macht das "Pred"?

Sharky 17. Nov 2005 08:36

Re: tstringlist öfter durchlaufen
 
Zitat:

Zitat von RavenIV
... was macht das "Pred"?

Das F1 Ding von Delphi meint
Die Funktion gibt den Vorgänger des Arguments zurück.


In diesem Fall ist also Pred(x) = x - 1; und Succ(x) = x + 1

Tigermoon 17. Nov 2005 09:45

Re: tstringlist öfter durchlaufen
 
wie bekomme ich das ende der datei raus?
also den letzten string für die for schleife

Tigermoon

Puhbaehr 17. Nov 2005 10:04

Re: tstringlist öfter durchlaufen
 
(Ist das nicht nen neues Thema?)

Schau mal in der OH nach EoF (Dateiende).
Genauso wegen Ende/Größe der StringList, Cursor auf TStringList und F1 drücken, Methoden klicken und staunen :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:38 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