Добрый день. Есть функция удаления подстроки типа <gg hhh>jjjj</gg> из строки
(на самом деле посимвольное копирование когда это не запрещено условием)
Код:
function DelUseless(const Data:string):string;
var
Len,I,EndTeg,Differ,J:integer;
DefineTeg:string; (*первые N символов после <*)
begin
Len:=Length(Data);
SetLength(Result, Len);
Differ:=0;
J:=0;
if Length(Data) = 0 then Exit else
for I := 1 to Length(Data) do
(*-----------------ЦИКЛ-----------------------------*)
begin
if Differ > 0 then Dec(Differ)
else
if (Data[i] = '<') then
begin
DefineTeg:=Copy(Data, I,10); (*тут тормоз?*)
if (PosEx('<script', DefineTeg,1)= 0) then
begin
Inc(J);
Result[J]:=Data[i];
end
else
begin
EndTeg:=PosEx('</script>',Data,I);
if (EndTeg > 0) then Differ:=(EndTeg - I + 8);
end
end
else
begin
Inc(J);
Result[J]:=Data[i];
end
end;
(*-----------------конец-----------------------------*)
SetLength(Result, J);
end; (*все работает*)
функция работает достаточно быстро (файл 3 мб за 30 мС обрабатывает)
но есть подозрение, что использование COPY (DefineTeg:=Copy(Data, I,10)

увеличивает время обработки
Внимание!! Вопрос:
1. действительно ли COPY не самое лучшее решение по быстродействию
2. чем можно заменить COPY? может вставка на ASM?