Показать сообщение отдельно
  #14  
Старый 19.02.2013, 23:10
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Зачем Insert? Можно просто дописать в конец. Что-то вроде
Код:
Count := 1;
cPos := 1;
Pos1:=PosEx('<', Data,1);
Result := '';
while Pos1 > 0 do
begin
   DefineTeg:=Copy(Data, Pos1, 10); (*копируем первые 11 символов с позиции первого вхождения*)
   TegEnd:=PosEx(' ',DefineTeg,1); (*позиция первого пробела *)
   if TegEnd = 0 then (*если пробела нет ищем >*)
       TegEnd:=PosEx('>',DefineTeg,1); (*позиция первого >*)
   if TegEnd = 0 then
       break;
   Pattern:=Copy(DefineTeg, 1, (TegEnd-1)); (*выделяем паттерн тега*)
   // можно и так, а можно
   // SetLength(DefineTag, TegEnd - 1);
   // и юзать DefineTag
   if Pattern = '<script' then
   begin
      Result := Result + Copy(Data, Count, Pos1 - Count);
      Count := PosEx('</script>', Data, Pos1 + 7) + 9;
      cPos1 := Count;
   end
   else
      cPos1 := Pos1 + 1;
   Pos1:=PosEx('<', Data,cPos);
end;
Result := Result + Copy(Data, Count, Length(Result) - Count);
ЗЫЖ не тестил, писал "на коленке", могут быть и ошибки.
Хотя вообще странно, что твой вариант медленнее. В таком случае может быть медленнее и тут. По идеи PosEx = rep scasb, одна команда; в то время как прибавление по одному символу - постоянные релоки строки.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием