Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Две версии Функции. что выбрать?


Страницы:   1 2 3 4

Pcrepair ©   (2012-12-06 23:33:00) 

Добрый день. Есть два варианта функции (удаляет теги и текст между тегами)

Вариант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. может есть недостатки? кто знает, напишите, пожалуйста


Anatoly Podgoretsky   (2012-12-09 11:26:00) [1]

> Inovet  (09.12.2012 00:04:18)  [78]

Главное, что ищет ведь она для этого и предназначена, пусть ищет


Германн   (2012-12-09 02:16:00) [2]


> это поисковая программа типа краулера (шманьдекс,хугль и
> прочие поисковые машины), но персональная. задаешь детальное
> описание искомого (десятки слов) и нажимаешь большую красную
> кнопку "крякер интернета" и программа начинает искать.

Класс!
:)


Inovet   (2012-12-09 00:04:00) [3]

> [77] Pcrepair ©   (08.12.12 22:01)
> ищет час, два, пока все не обшарит

Может год, два?


Pcrepair   (2012-12-08 22:01:00) [4]

нет конечно. для этих целей полно всяких программ
это поисковая программа типа краулера (шманьдекс,хугль и прочие поисковые машины), но персональная. задаешь детальное описание искомого (десятки слов) и нажимаешь большую красную кнопку "крякер интернета" и программа начинает искать. ищет час, два, пока все не обшарит, потом выдает УРЛ страниц наиболее релевантных тексту запроса в виде ХТМЛ-страницы в системный браузер. далее уже можно просмотреть чего там накопано


DVM   (2012-12-08 21:46:00) [5]


> Pcrepair ©   (08.12.12 21:36) [75]

так, кажется начинаю понимать, а в целом что за задача? скачать сайт целиком и получить оффлайн его копию?


Pcrepair   (2012-12-08 21:36:00) [6]

вот так они и мешают:





у меня функция воостановления УРЛ и закачки страницы фрейма реагирует на frame src, соотвественно если не удалить скрипты то получится черти что


DVM   (2012-12-08 21:27:00) [7]


> Pcrepair ©   (08.12.12 21:00) [72]

я это видел, но я не понял, скрипты же только в браузере исполняются, как они тебе могут мешать, если ты страницы грузишь с помощью Indy?


знайка   (2012-12-08 21:06:00) [8]

Вот как раз это пояснение совсем не понятное. про что тут, кто догадался? :)


Pcrepair   (2012-12-08 21:00:00) [9]

уже было:
- при загрузке страниц с фреймами нужно просто удалить теги скриптов со всем содержимым(там внутри есть теги frame src) чтоб не сбивать работу кода дозакачивающего страницы фреймов


DVM   (2012-12-08 20:41:00) [10]


> Pcrepair ©   (08.12.12 20:34) [70]

А зачем ты вообще скрипты то вырезаешь, если не секрет?


Pcrepair   (2012-12-08 20:34:00) [11]

ну вообще у меня есть набор кривых страниц, на обработке которых зависали прежние версии функций. текущая версия не виснет

что до регистрозависимость - ее нет, еще в модуле загрузчика есть Result:=AnsiLowerCase(Loader.Get(PageUrl));

тут некоторые удивлялись, зачем обработка исключений в цикле. может надо и не в цикле, но как раз для того "закрывающий тег ожидает после Script, ну еще там по мелочам"

так что если что не так то просто exit и фиг с этой страницей


Pcrepair   (2012-12-08 20:28:00) [12]


> а как же мегапроблема удаления скриптов?

это для тебя мегапраблема, а у меня уже все работает


DVM   (2012-12-08 20:27:00) [13]


> Pcrepair ©

Раз речь об HTML, то задача несколько усложняется. Дело в то, что я как уже говорил, к некорректным HTML многие браузеры относятся очень лояльно, ведь их задача отобразить страницу, а не делать ей валидацию. Следовательно они глотают ошибки. Следовательно огромное количество страниц на реальных сайтах изобилует ошибками. Они не от неграмотности, они просто от невнимательности или случайных описок. Потом, в HTML слишком много вольностей, регистр тегов может быть разный, кавычки то есть то нет, то двойные то одинарные, и.т.д. ит.п. Поэтому у тебя 3 пути:

1) Пользоваться своей функцией (она будет максимально быстра, но в нынешнем виде имеет недостатки: регистрозависима, закрывающий тег ожидает после Script, ну еще там по мелочам).
2) Использовать регулярные выражения. Но выражение еще надо суметь написать. Кроме того, регулярные выражения обладают плохим свойством, если ими не пользоваться постоянно, перестаешь понимать написанное напрочь спустя время.
3) IHTMLDocument2
4) Сторонний DOM парсер.


DVM   (2012-12-08 20:17:00) [14]


> Медвежонок Пятачок ©  

а как же IHTMLDocument2 ? :)


Медвежонок Пятачок   (2012-12-08 20:11:00) [15]

ну значит все отменяется. драки не будет


DVM   (2012-12-08 20:08:00) [16]


> Pcrepair ©   (08.12.12 19:21) [61]


> оно же HTML

так речь об HTML, а не XHTML?


> Медвежонок Пятачок ©   (08.12.12 19:32) [62]

он ведь действительно про HTML получается написал, а не про XHTML, зря мы тут ругались. Я тоже прочитал как XHTML.


Медвежонок Пятачок   (2012-12-08 20:04:00) [17]

ты еще здесь?
а как же мегапроблема удаления скриптов?


Pcrepair   (2012-12-08 20:02:00) [18]

и чо? по русски не читаешь?
ХТМЛ это то же что и HTML, обрати внимание на последнюю букву ЛЛЛЛЛ
а стандарт HTML как раз и сообщает о том что тег <script> ВСЕГДА должен заканчиваться </script> - вот об этом речь шла

так что не гони


Медвежонок Пятачок   (2012-12-08 19:32:00) [19]

3. ну вообщето речь идет об обработке кода в стандарте ХТМЛ, где на открывающий тег всегда есть закрывающий

http://ru.wikipedia.org/wiki/XHTML

иди давай, задрачивай, свой свой велокод.


Pcrepair   (2012-12-08 19:21:00) [20]

Xtml? страницу??
ха-ха-ха
ты походу не отличаешь кырылиццу от латиницы, если для тебя ХТМЛ(оно же HTML) = xtml

с тобой все понятно, видимо выходные проходят не зря


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо