Einzelnen Beitrag anzeigen

Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

Re: minni while schleife auf geschwindigkeit optimieren

  Alt 27. Jan 2009, 20:35
Delphi-Quellcode:
function StripHTMLTags(const HTML: string): string;
var
  TagDepth: integer;
  i: integer;
  ResultIndex: integer;
begin
  TagDepth := 0;
  ResultIndex := 1;
  SetLength(result, length(HTML));
  for i := 1 to length(HTML) do
  begin
    case HTML[i] of
    '<': inc(TagDepth);
    '>': dec(TagDepth); // ggf. hier prüfen, ob der Tag überhaupt schon geöffnet wurde (TagDepth > 0)
    else
      if TagDepth > 0 then
      begin
        result[ResultIndex] := HTML[i];
        inc(ResultIndex);
      end;
    end;
  end;
  SetLength(result, ResultIndex);
end;
Im Antwortfenster aus dem Kopf getippt - ich kann daher nicht garantieren, dass es funktioniert. Der Ansatz ist einfach, einen String mit der gleichen Länge wie dem ursprungsstring zu erstellen (länger kann das Ergebnis ja nicht sein). Anschließend wird jedes Zeichen in einer Schleife in den Ergebnisstring übertragen, wenn nicht ein oder mehrere Tags geöffnet sind. Am Ende wird der String noch zu recht gestutzt.

Das ist aber nur eine einfache Methode, die man besser nicht auf allzu invaliden HTML-Code loslassen sollte. Wenn man auf Nummer sicher gehen will/muss, sollte man besser einen Parser verwenden.
  Mit Zitat antworten Zitat