Einzelnen Beitrag anzeigen

Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#4

Re: tstringlist öfter durchlaufen

  Alt 17. Nov 2005, 09:27
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;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat