![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Добрый день. Есть функция удаления подстроки типа <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? |