Ich habe mal folgendes gebastelt. Nicht geprüft und von der Performence her wohl auch nicht so doll. Zwei memos. In memo1 steht der zu untersuchende Text, in memo2 wird pro übereinstimmung einmal das Suchpattern ausgegeben.
lenSub gibt die lenge des Suchpatterns an. In diesem beispiel 3. Zu beginn werden die ersten 3 Zeichen kopiert und dann mit allen Zeichenketten der Länge drei des Textes verglichen. Und so weiter, wobei das Suchpattern jedes mal einen Schritt im Text weiter geht.
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
s : string;
I: Integer;
sub : string;
comp : string;
j: Integer;
lenSub : integer;
begin
s := '';
lenSub := 3;
for I := 0 to memo1.lines.count - 1 do
s := s + memo1.lines[i];
for I := 1 to length(s)-lenSub-1 do
begin
sub := copy (s,i,lenSub);
for j := lenSub+1+i to length(s)-lenSub-1-i do
begin
comp := copy (s,j,lenSub);
if UpperCase(comp) = UpperCase(sub) then
memo2.Lines.add(sub);
end;
end;
end;
Gruß
tr909
*edit* Besser wäre wohl folgender Ansatz. Zuerst alle möglichen ungleichen Pattern einer Länge ermitteln. Dann mit diesen Werten eine mit Hilfe von z.B. dem Knuth-Morris-Pratt-Algorithmus suchen.
*edit*