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
inc)
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;