![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Добрый день. Есть функция на основе цикла FOR для удаления подстрок из строки за один проход
Код:
(* 09.02.2013 Функция удаления ненужных тегов с содержимым
Список тегов: script; style; noscript; applet; object
textarea; audio; button; canvas; comment; datalist; del;
meter; noembed; optgroup; output; progress. удаление за один проход*)
function DelUseless(const Data:string):string;
var
I,EndTeg,Differ:integer;
Buffer:string; (*накопитель полезных символов*)
DefineTeg:string; (*первые 10 символов после <*)
begin
Differ:=0;
if Length(Data) = 0 then Exit else
for I := 1 to Length(Data) do
begin
if (Data[i] = '<') then (*ловим открывающий символ*)
begin
DefineTeg:=Copy(Data, I,10); (*получаем десять символов от открывающего*)
if (PosEx('<script', DefineTeg,1)= 0) then (*если там нет '<script'*)
Buffer:=Buffer+Data[i] (*копируем символ в буфер ЕСЛИ не <script*)
else
begin
EndTeg:=PosEx('</script>',Data,I); (*определяем замыкающий тег*)
if (EndTeg > 0) then Differ:=(EndTeg - I + 9); (* вычисляеи число символов от и до;*)
end
end
else
if (Differ = 0) then Buffer:=Buffer+Data[i] (*копируем посимвольно в буфер ЕСЛИ не <*)
else Dec(Differ, 1) (*с каждым тактом в цикле уменьшаем счетчик числа символов в <script hghg>hghghgh</script>*)
end;
Result:=Buffer;
end;1<script>2</script>3 4<script>5</script>6 трансформирует в 1< 4< а должно быть 13 46 Подскажите, кто в курсе, в чем ошибка? З.Ы. Цикл FOR используется для того чтобы в затем ввести CASE при выборе тега для обработки и как самый быстрый вариант(один проход от первого символа до последнего в строке) |
|
#2
|
||||
|
||||
|
а самому разобраться как работает функция и найти ошибку никак? не так уж и много строк.
|
|
#3
|
|||
|
|||
|
функция и так моя, разбирался как мог, теперь твоя очередь.
|
|
#4
|
||||
|
||||
|
вот это читал:
Цитата:
|
|
#5
|
|||
|
|||
|
вообщето там функция а не процедура
ну и сам по себе ответ какойто.... ну обойдемся без мата если уж вылез кто со своим мнением, так уж поведай что конкретно не так, а обобщать не надо |
|
#6
|
||||
|
||||
|
для Delphi 7 http://zalil.ru/34247888
Код:
uses
Unit2,
...
Edit1.Text:=NumLockStr('1<script>2</script>3 4<script>5</script>6', 'script'); |