![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Добрый день. Есть два варианта функции (удаляет теги и текст между тегами)
Вариант1 Код:
function DelJS(const Code:string):string; var Buffer:string; StartTeg:integer; EndTeg:integer; i:integer; begin Buffer:=Code; repeat try StartTeg:=Pos('<script', Buffer); EndTeg:=Pos('</script>', Buffer); Delete(Buffer, StartTeg, EndTeg-StartTeg+9); i:=Pos('<script', Buffer); except break end; until i = 0; Result:=Buffer; end; Вариант2 Код:
function DelJS(const Code:string):string; var EndTeg:string; Buffer:string; index1:integer; index2:integer; i:integer; begin EndTeg:='</script>'; Buffer:=Code; index1:=Pos('<script', Buffer); while (index1 <> 0) do begin index2 := index1; i := 1; while i <> 10 do begin try Inc(index2); if Buffer[index2] = EndTeg[i] then Inc(i) else i := 1; except break end; end; Delete(Buffer, index1, index2 - index1 + 1); index1 := Pos('<script', Buffer); end; Result := Buffer; end; Оба варианта работают в общем одинаково, удаляют что назначено, грузят проц на большом файле и все такое ВНИМАНИЕ!!! Вопросы: 1. какой вариант более соотвествует классическому стилю программирования, более правильный? 2. может есть недостатки? кто знает, напишите, пожалуйста |
#2
|
|||
|
|||
![]() поидее если есть код тестов, которые оба они проходят то тот который короче или проще,
а если в общем, то первый зависает если найдёт закрывающий тэг до открывающего, ещё бывает js в событиях всяких onevent можно ещё сделать посимвольно: Код:
function here(substr,instr:string; atpos:integer):boolean; var i:integer; begin result := false; if length(instr) < atpos+length(substr)-1 then exit; //на всякий for i := 1 to length(substr) do if instr[atpos+i - 1] <> substr[i] then exit; result := true; end; function hereAtleft(substr,instr:string; atpos:integer):boolean; begin result := here(substr,instr,atpos - length(substr)); end; function DelJS(const inCode:string):string; const OPENTAG = '<script'; CLOSETAG = '</script>'; var i:integer; script:boolean; begin result := ''; script := false; for i := 1 to length(incode) do begin if here(OPENTAG,incode,i) then script := true else if hereAtleft(CLOSETAG,incode,i) then script := false; if not script then result := result + incode[i]; end end; { кстати из <<script></script>script>123</script> делает <script>123</script> поэтому для удовлетворения паранои можно ещё в цикле запускать } >woweook< Последний раз редактировалось Pyro, 07.12.2012 в 09:14. |
Этот пользователь сказал Спасибо Pyro за это полезное сообщение: | ||
Pcrepair (07.12.2012)
|
#3
|
|||
|
|||
![]() Спасибо за пример, попробую
|