Einzelnen Beitrag anzeigen

Benutzerbild von peschai
peschai

Registriert seit: 15. Feb 2004
Ort: Göppingen
270 Beiträge
 
Delphi XE5 Professional
 
#5

Re: StringList schnell nach mehreren Strings durchsuchen

  Alt 2. Okt 2007, 15:46
Hallo,

oder wie wärs hiermit? (extra für dich!)
Ansatz über Zeiger mit dem Nachteil daß eine große Liste extra Memory braucht, aber schnell sein dürfte ...

Delphi-Quellcode:
function SeekStrings(List: TStringList;strs: TStringList): TStringList;
var
  i,j,k,m: integer;
  s1:String;
  s2:String;
begin
  { Safety }
  Result := Nil;
  if not Assigned(List) or not Assigned(strs) then exit;
  i := 0;
  j := 0;
  k := 0;
  m := 0;
  s1 := '';
  s2 := '';

  { Action }
  s1 := List.Text+#0; //Liste ine eine Zeichenkette für ZeigerWandern umwandeln:
  { Nachteil platz, Vorteil Speed }

  m := Length(s1)-1; // Bytelänge dieses Textes ohne unseren #0 abschluss
  if (m>0) then // gibt's überhaupt was zu tun ?
    begin
      Result:=TStringList.Create; // Ergebnisliste vorbereiten
      for j:=0 to strs.Count-1 do // für alle zu suchende Wörter
        begin
          i := 1 ;
          k := 0;
          s2 := strs[j]+#0; // Suchwort für pChar Zeiger vorbereiten
          While (AnsiStrPos(@s1[i],@s2[1])<>NIL) do // s2 suchen ab position s1[i]
            begin
              inc(k); // fündig also Zähler erhöhen
              inc(i,Length(s2)-1); // Offset für nächste Suchposition
              if (i>m) then // security damit i keine exception lösen kann
                break;
            end;
          if (k>0)
            then Result.Add(s2+'='+IntToStr(k));
        end;
      { Falls nichts gefunden }
      if (Result.Count<1) then
        FreeAndNil(Result)
    end;
end;
Peter Schaible
  Mit Zitat antworten Zitat