Einzelnen Beitrag anzeigen

tr909

Registriert seit: 5. Nov 2004
193 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Wiederkehrende Patterns in einem Text finden

  Alt 26. Jul 2007, 09:52
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*
  Mit Zitat antworten Zitat