Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

Re: Kommentare aus einem CSS-Code löschen

  Alt 8. Okt 2004, 10:56
auf den 1. Blick scheint es ja zu laufen.

- also zum Ordnungsgemäßen verlaßen der Schleife hätte ich Break, statt Exit verwendet.
- "while (Pos('/*',myInhalt)) > -1 do" ist auch unnötig, da du ja schon innerhalb der Schleife die Kontrollen hast.
Ausserdem würde, wenn mal kein '/*' in dem CSS-Code drin ist kein String von deiner Funktion zurückgegeben, da du das ja nur innerhalb der Schleife machst und wenn die Schleife erst garnicht betreten wird, dann ist natürlich das Funktionsergebnis undefiniert
- am Anfang macht sich das Trim schon beim Zusammensetzten besser, da dieses ja nur die Zeichen am Anfang/Ende des Strings löscht und du demnach die Leerzeichen in den Zeilen dazwischen, welche ja fast immer am Zeilenanfang (die Einrückung) vorhanden sind, drinläßt.
- "if beg_com > 0 then" und "if end_com > 0 then" werkennt auch sowas "*/ ... /*", was aber kein Kommentar ist
und außerdem lassen sich diese Abfragen vereinen und somit ein Austrittspunkt einsparen
- die Leerzeichen ' ' werden wegen dem oben beschriebenem Problem eingefügt, weil ja bestimmte Zeichen nicht zusammen dürfen, weil es sonst Probleme gibt - nach der While-Schleife könnte man jetzt noch diese und die eh schon vorhanden und teilweise überflüssigen Leerzeigen entfernen
- "inc(CommentCount);" ist nur 'ne verkürzung von "CommentCount := CommentCount + 1;" (siehe Delphi-Referenz durchsucheninc)

Delphi-Quellcode:
function ClearCommentarTStrings(Inhalt:TStrings):String;
var
  i,beg_com,end_com:integer;
  myInhalt:string;
begin
  CommentCount:=0;
  for i:=0 to Inhalt.Count -1 do
    myInhalt:=myInhalt + ' ' + Trim(Inhalt.Strings[i]);
  while true do
    begin
      beg_com:=Pos('/*', myInhalt);
      end_com:=Pos('*/', myInhalt);
      if (beg_com > 0) and (end_com > beg_com) then
        begin
          inc(CommentCount);
          delete(myInhalt,beg_com,end_com-beg_com+2);
          insert(myInhalt,' ',beg_com);
        end
      else
        Break;
    end;
  Result:=myInhalt;
end;
$2B or not $2B
  Mit Zitat antworten Zitat