Форум: "Основная";
Текущий архив: 2017.11.12;
Скачать: [xml.tar.bz2];
ВнизДве версии Функции. что выбрать? Найти похожие ветки
← →
Pcrepair © (2012-12-06 23:33) [0]Добрый день. Есть два варианта функции (удаляет теги и текст между тегами)
Вариант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. может есть недостатки? кто знает, напишите, пожалуйста
← →
Eraser © (2012-12-07 00:01) [1]Я бы прикрутил модуль регулярных выражений. В будущем можно будет легко модифицировать и код будет более понятен.
← →
Sha © (2012-12-07 00:06) [2]Никакой. Вот представь, что вручную все сам удалял бы.
Неужели пользовался бы одним из этих алгортмов?
← →
Pcrepair © (2012-12-07 00:08) [3]
> Никакой. Вот представь, что вручную все сам удалял бы.
> Неужели пользовался бы одним из этих алгортмов?
не слишком ли голословно? что конкретно не так?
← →
Sha © (2012-12-07 00:13) [4]> не слишком ли голословно? что конкретно не так?
а ты попробуй нормальными словами проговорить
и выполнить руками каждый шаг - сразу все сам и поймешь
← →
RWolf © (2012-12-07 00:23) [5]http://stackoverflow.com/a/1732454
← →
Медвежонок Пятачок © (2012-12-07 08:42) [6]. какой вариант более соотвествует классическому стилю программирования,
А какой стиль программирования принимается за классический конкретным программистом?
← →
Медвежонок Пятачок © (2012-12-07 08:48) [7]А конкретно по теме - забить философские размышления о классическом стиле. Задуматься над тем, что, что обе функции неизбежно придется модифицировать со временем.
Поэтому надо написать один раз функцию-движок и создать для нее метаданные с описанием что менять и на что.
← →
sniknik © (2012-12-07 09:53) [8]по сути обе функции одинаковы, просто вариации на тему циклов, без изменения сути.
недостатки
1 - пустой эксепт. про что говорить уже настолько надоело... больше только страдать от компаний поставляющих такой код на поддержку, ламерами писанный (хорошо еще если есть код, а вот когда программа просто не работает, а ошибка типа у нас... - "- ошибка "не достоверные данные" говорит о глюке в программе их постановляющим. проверите, что от нее приходит. - нет там глюков нет! она работает, и без ошибок. это ваша отказывается! - дайте ей корректные данные, работает? можете тестовые подложить. - да работает. но глюка в программе все одно нет! что делать? ... т.д." и такая бодяга иногда месяцами!!!).
2 - html не регистрозависим. отсюда попросту явный баг в не разборе некоторых страниц.
3 - связанное с первым написание может быть различным не только в регистре буков... это скрипт, могут быть вложенности... ну, например<script language="JavaScript" type="text/javascript">
/*<![CDATA[*/
function start()
{
alert("</script>");
}
/*]]>*/
</script>
4 - не ошибка, но тем не менее, постоянные перераспределения памяти, от изменения текста. не самые скоростные функции в общем.
← →
Бодрый Яр (2012-12-07 11:35) [9]
> модуль регулярных выражений. В будущем можно будет легко
> модифицировать
угу, и получится синтаксический анализатор на регулярныз выражениях
оба варианта неряшливы до крайности
← →
Pcrepair © (2012-12-07 20:22) [10]Eraser, если возможно дай ссылку на описание работы с РегЕксп (как там конкретно писать обработку)
Вообще пользуюсь РАД ХЕ3, там есть встроенная обработка РегЕксп, надеюсь программирование обработки у чумбаркадеро совпадает с regexpstudio.com тогда и искать не надо
sniknik, спасибо за развернутый ответ
1. пустой ексепт - не просто так. встречаются страницы, из обработки которых лучше просто выйти. и не важно какая там ошибка
2. ??? непонятно о чем. но вообще после закачки страницы все символы приводятся к нижнему регистру через АнсиЛоерКэйс
3. ну вообщето речь идет об обработке кода в стандарте ХТМЛ, где на открывающий тег всегда есть закрывающий
4. вот по поводу не самых скоростных функций если можно подробнее. что там еще в делфи кроме встроенных процедур и функций может быть еще?
← →
DVM © (2012-12-07 22:28) [11]
> ВНИМАНИЕ!!! Вопросы:
> 1. какой вариант более соотвествует классическому стилю
> программирования, более правильный?
НИКАКОЙ.
Для таких задач либо машину состояний надо делать, либо регулярные выражения (собственно это уже готовая ее реализация в каком то смысле)
← →
Медвежонок Пятачок © (2012-12-07 22:31) [12]3. ну вообщето речь идет об обработке кода в стандарте ХТМЛ, где на открывающий тег всегда есть закрывающий
И какая цель преследуется?
Что у нас будет после удаления тегов?
← →
Медвежонок Пятачок © (2012-12-07 22:48) [13]Хотя какая разница?
Нафик функции, нафик регулярки.
Раз это xhtml, то грузим его в дом.
iList := xdoc.selectNodes("//script");
for i := pred(iList.length) downto 0 do iList.item[i].parentNode.removeChild(iList.item[i]);
xdoc.save(newname);
ShowMessage("зетс олл, фолкс! Все узлы "скрипт" удалены");
← →
DVM © (2012-12-07 22:58) [14]
> Медвежонок Пятачок © (07.12.12 22:48) [13]
узлы то <script> удалены, но сам JavaScript нет, есть же еще такие варианты:
<input type="submit" name="add2" class="add_btn" value="Добавить" title="Добавить вопрос в конференцию" onClick="setCookie("delphi_name", document.F1.name.value);setCookie("delphi_email", document.F1.email.value);" />
← →
Медвежонок Пятачок © (2012-12-07 23:00) [15]С чего бы самому скрипту-то там остаться если он внутри узла <script>?
← →
Медвежонок Пятачок © (2012-12-07 23:03) [16]<input type="submit" name="add2" class="add_btn" value="Добавить" title="Добавить вопрос в конференцию" onClick="setCookie("delphi_name", document.F1.name.value);setCookie("delphi_email", document.F1.email.value);" />
сначала
selectNodes("//*/@onClick");
затем грохнуть весь список.
в общем аналогично.
← →
DVM © (2012-12-07 23:15) [17]
> сначала
> selectNodes("//*/@onClick");
тогда уж по всем событиям надо
Проще в браузере запретить JS чем выковырять его полностью из страницы, еще CSS анализировать придется, там как ни странно тоже JS возможен.
← →
Медвежонок Пятачок © (2012-12-07 23:23) [18]тогда уж по всем событиям надо
selectNodes("//*/@onClick"); // это как раз все события onClick. Вообще все.
Ну так я и говорил, что надо написать енумератор узлов и метаданные для него.
что-то типа такого:
метаданные:
<root>
<item xpath="//script" type="remove"/>
<item xpath="//*/@onClick" type="setNull"/>
....
<item xpath="//*/@onLoad" type="setNull"/>
</root>
енумератор:
selectNodes("/root/item");
цикл по списку;
если тайп = ремув, вызвать функцию удаления узла;
если тайп = setNull вызвать функцию присваивающую узлу пустоту (хотя можно и тоже просто ремувнуть)
конец цикла;
← →
Медвежонок Пятачок © (2012-12-07 23:24) [19]Главное что при этом велорикша не участвует.
/* В смысле нет велосипедно-индусского кода. */
← →
DVM © (2012-12-07 23:31) [20]
> Медвежонок Пятачок © (07.12.12 23:23) [18]
> это как раз все события onClick. Вообще все.
есть еще другие виды событий я хотел сказать
> Главное что при этом велорикша не участвует.
в реальной жизни твой подход мало применим, так как даже страницы, заявленные как xhtml часто содержат ошибки с точки зрения xhtml но проглатываются браузером, т.к. сервер указывает Content-Type почти всегда text/html и ошибки остаются скрыты. Парсер ведь откажется работать?
← →
Медвежонок Пятачок © (2012-12-07 23:35) [21]в реальной жизни твой подход мало применим,
В моей реальной жизни он ежедневно применим.
Что там у автора, я без понятия. Но он сказал, что фсё чотко, все теги парные и т.д.
← →
Sha © (2012-12-07 23:51) [22]
> Pcrepair © (07.12.12 20:22) [10]
> 4. вот по поводу не самых скоростных функций если можно подробнее.
> что там еще в делфи кроме встроенных процедур и функций может быть еще?
Ты не поверишь - циклы.
Посчитай, сколько раз оба решения проверят первый символ и переместят последний?
А ведь достаточно одного раза. Согласен?
← →
DVM © (2012-12-08 00:01) [23]
> Медвежонок Пятачок © (07.12.12 23:35) [21]
А вот еще момент такой. Если автор хочет удалить из страницы теги с JavaScript, то вероятно он потом хочет получить на выходе код максимально близкий к тому, что было, но без тегов. Обратное преобразование DOM в текст не исказит ли как страницу?
← →
Медвежонок Пятачок © (2012-12-08 00:07) [24]В смысле не поломается ли документ после save?
Не поломается.
Останутся даже исходные CRLF если исходник был с ними.
/* некоторые (не я) любят чтобы и в блокноте xml был лесенкой */
← →
Pcrepair © (2012-12-08 00:22) [25]как много.... нафантазировано
все проще:
- есть загрузчик на idHTTP.GET
- при загрузке страниц с фреймами нужно просто удалить теги скриптов со всем содержимым(там есть теги frame src) чтоб не сбивать работу кода дозакачивающего страницы фреймов
желательно еще чтоб на жирных страницах проц не грузило
и тут еще вопрос:
использование РегЕксп от ХЕ3 уменьшит загрузку проца в сравнении сfunction DelJS(const Code:string):string;
const
StartJS = "<script";
EndJS = "</script>";
var
iCopyFrom,iCopyUp,iRes,Len:integer;
begin
Len:=Length(Code);
SetLength(Result,Len); //выделяем память под строку без копирования
if Len = 0 then Exit;
iRes:=1;
iCopyFrom:=1; //индекс начала копируемого куска текста
repeat
iCopyUp:=PosEx(StartJS,Code,iCopyFrom); //индекс конца копируемого куска + 1
if iCopyUp = 0 then iCopyUp:=Len+1; //если тег не найден, то копируем до конца строки
Move(Code[iCopyFrom],Result[iRes],(iCopyUp-iCopyFrom)*SizeOf(Code[1])); //копируем кусок в Result
inc(iRes,iCopyUp-iCopyFrom);
iCopyFrom:=PosEx(EndJS,Code,iCopyUp+Length(StartJS)); //ищем заверш.тег
if iCopyFrom = 0 then //нештатная ситуация - пропуск тега
break
else
inc(iCopyFrom,Length(EndJS)); //индекс начала следующего куска текста
until iCopyFrom > Len;
if Length(Result) > iRes-1 then //корректируем длину рез.строки
SetLength(Result,iRes-1);
end;
ась??
← →
DVM © (2012-12-08 00:34) [26]
> Pcrepair © (08.12.12 00:22) [25]
> как много.... нафантазировано
> все проще:
Что будет делать твой код, встретив такое:
<PRE><script>...</script></PRE>
← →
Pcrepair © (2012-12-08 00:36) [27]а вот это самое:
<PRE></PRE>
как и положено
← →
Pcrepair © (2012-12-08 00:37) [28]по поводу РегЕксп от ХЕ3 кто что знает?
← →
DVM © (2012-12-08 00:39) [29]
> Pcrepair © (08.12.12 00:36) [27]
> а вот это самое:
>
> <PRE></PRE>
>
> как и положено
но так неправильно, внутри PRE CODE PLAINTEXT находится не JavaScript а просто текст.
← →
Pcrepair © (2012-12-08 00:47) [30]для меня ПРАВИЛЬНО, если какие то потсы непонятно для чего засунут в тег PRE зачемто текст с символами script и прочее это их личные проблемы
еще разок:
- есть загрузчик на idHTTP.GET
- при загрузке страниц с фреймами нужно просто удалить теги скриптов со всем содержимым(там есть теги frame src) чтоб не сбивать работу кода дозакачивающего страницы фреймов
← →
DVM © (2012-12-08 00:53) [31]
> Pcrepair © (08.12.12 00:47) [30]
> для меня ПРАВИЛЬНО
тогда чего ты хочешь? функцию ты уже написал, если она работает так и оставь, я бы только не стал надеяться, что
> EndJS = "</script>";
закрывающая скобка > всегда будет вплотную. ну и регистр еще.
← →
знайка (2012-12-08 00:56) [32]
> но так неправильно
с чего вдруг?
← →
DVM © (2012-12-08 01:00) [33]
> знайка (08.12.12 00:56) [32]
> с чего вдруг?
содержимое тега PRE разве не должно выводиться в точности как написано
← →
DVM © (2012-12-08 01:05) [34]не с pre я перепутал, возьмем такой вариант лучше
<PLAINTEXT><script>...</script></PLAINTEXT>
тут точно <script> никакого отношения к JS не имеет и его удалять не надо
← →
Pcrepair © (2012-12-08 01:18) [35]использование РегЕксп от ХЕ3 уменьшит загрузку проца?
по поводу РегЕксп от ХЕ3 кто что знает?
хватит уже отклонятся от темы
← →
Германн © (2012-12-08 02:13) [36]
> хватит уже отклонятся от темы
>
А тема то какая?
Тот самый супер-пупер-мега-проект?
← →
кунак (2012-12-08 02:28) [37]http://tsya.ru
и:
1. ждать на входе "<script", символы слать на выход
2. дождавшись блокировать выход, ждать "/script>"
3. сполоснуть и повторить
← →
sniknik © (2012-12-08 10:12) [38]> sniknik, спасибо за развернутый ответ
но следовать ему я не буду ибо см "отмазки" по пунктам...
?
я прочитал именно это. нафига спрашиваешь тогда? если все устраивает, зачем нас "уговаривать" что это нормально, и у тебя такого не будет... вместо того чтобы принять к сведению не предусмотренные тобой варианты.
нафига после ответа меняешь условия? - "у меня того не будет, другого тоже не будет". почему это в задаче не описано???
по пункту 2. открой прямо вот эту страницу в исходном коде и вырежи ну хотя бы первые 3 блока тегов по своему "алгоритму".
← →
Медвежонок Пятачок © (2012-12-08 11:23) [39]Не, если человек велорикша, то это надолго.
инди, регэксп, мегафункции грузящие процессор......
begin
xdoc := CoDomDocumnent.create();
xdoc.async := false;
xdoc.load("http://mypageurl");
xml_enum_nodes(xdoc,"//script",delete_callback_function);
xml_enum_nodes(xdoc,"//*/@onClick",setnull_callback_function);
xml_enum_nodes(xdoc,"//*/@onClick",setnull_callback_function);
end;
function delete_callback_function(iNode,.....) : boolean;
begin
iNode.parentNode.removeChild(iNode);
return true;
end;
function setnull_callback_function(iNode,.....) : boolean;
begin
iNode.nodeValue := "";
result := true;
end;
function xml_enum_nodes(iNode,aXPath, aCallback) : integer;
begin
Result := 0;
iList := iNode.selectNodes(aXPath);
for i := (iLIst.length) down to 0 do
if aCallback(iList.item[i]) then inc(Result);
end;
← →
DVM © (2012-12-08 15:32) [40]
> Медвежонок Пятачок © (08.12.12 11:23) [39]
> мегафункции грузящие процессор......
а COM объект-монстр, тянущий за собой библиотек на добрую сотню мегабайт, строящий DOM модель (и соответственно по черному жрущий память) для тривиальной задачи - это нормально? И не дай бог для задачи, где требуется высокая производительность? Его функция из [25] много быстрее будет, сдается мне, и к памяти нетребовательна.
← →
DVM © (2012-12-08 15:37) [41]Опять же, если речь идет о Windows это одно, но вот у меня, например, половина кода работает под Linux и где там все эти расчудесные либы от MS. Нету там их.
← →
DVM © (2012-12-08 15:43) [42]
> Pcrepair © (08.12.12 01:18) [35]
> использование РегЕксп от ХЕ3 уменьшит загрузку проца?
в [25] у тебя вполне приличный в плане скорости код (на первый взгляд) и он точно будет быстрее RegExp. Загрузка процессора она прямо пропорциональна скорости работы. Не хочешь грузить - вставляй хотя бы sleep, разноси по разным потокам и т.д.
← →
Pcrepair © (2012-12-08 16:48) [43]sniknik
> по пункту 2. открой прямо вот эту страницу в исходном коде
> и вырежи ну хотя бы первые 3 блока тегов по своему "алгоритму".
>
открыл, и че?
все блоки со скриптами удалены
← →
Медвежонок Пятачок © (2012-12-08 17:27) [44]а COM объект-монстр, тянущий за собой библиотек
Ой ну йо мае.
Браузер-то что по вашему с дом страницей делает?
Не то же самое, и не через то же самое?
Лишь бы потрендеть.
← →
Медвежонок Пятачок © (2012-12-08 17:30) [45]для тривиальной задачи - это нормально?
Уже спрашивали. Много раз.
Много раз отвечал, но видимо не доходит. Отвечаю еще раз:
Это нормально. Проверено годами и ежедневным использованием.
А у меня вот встречный вопрос:
Тривиальная задача решается уже второй день, куча кода, для которого потребуется еще куча другого кода.
Для меня это дико и ненормально. А для вас?
← →
Медвежонок Пятачок © (2012-12-08 17:38) [46]Его функция из [25] много быстрее будет, сдается мне, и к памяти нетребовательна.
Теперь сравни время потраченное на ее написание, время на ее сопровождение, время, которое он выиграет по сравнению с тем, если будет с домом работать через дом (как и делают вменяемые люди).
Потом посмотри на мой код и сделай то же самое.
Потом прикинь, трудозатраты на его сопровождение с трудозатратами сопровождения начального примера.
← →
Pcrepair © (2012-12-08 17:55) [47]медвежонок, ну не надо так нервничать
это все просто изучение ДЕЛФИ, пока в рамках процедурного программирования
сообрази сам, можно ли заморачиваться на ООП не изучив процедурное?
сам то небось лет пять говнокод писал, пока не научился?
лучше приведи нормальный пример своей версии, с указанием используемых унитов и тд. чтоб можно было откомпилировать и посмотреть
← →
Медвежонок Пятачок © (2012-12-08 18:02) [48]Ты скажи, грузится твоя страница в дом или нет?
Если грузится, то задача решается минимальным объемом кода ([39]).
Причем этот код в сто раз более прозрачен и в тыщщу раз более легко модифицируем. (а это в миллион раз важнее абстрактной оптимизации которая как раз таки в тривиальной задаче никому реально не нужна).
Если ты разработчик, то от тебя в первую очередь ждут быстрого решения задачи. И способности быстро перестроить уже реализованное решение под меняющиеся условия. А меняются они в реальной жизни очень часто.
← →
Pcrepair © (2012-12-08 18:22) [49]моя страница(точнее любая из триллиона страниц интернета) в дом не грузится
страница так сказать парсится. из нее вынимаются тексты предназначенные для людей и анализируются на предмет соответствия критерию.
но полный пример приведи, просто интересно будет посмотреть что это
← →
Медвежонок Пятачок © (2012-12-08 18:25) [50]я не про то, грузишь ли ты свою страницу в дом.
а про то, грузится ли она вообще в дом.
если да, то будет тебе пример образцово-показательного кода.
в коробочном варианте.
потом внукам подаришь.
итак: ссылка на страницу есть?
← →
DVM © (2012-12-08 18:34) [51]
> Медвежонок Пятачок © (08.12.12 17:27) [44]
> а COM объект-монстр, тянущий за собой библиотек
>
> Ой ну йо мае.
> Браузер-то что по вашему с дом страницей делает?
> Не то же самое, и не через то же самое?
> Лишь бы потрендеть.
Потрындеть бы лишь тебе, тысячу раз уже говорил. Если ты не видишь разницы между приложением перелопачивающим тысячи страниц и браузером страницу в котором пользователь открыл и пялится в нее. Если все твои программы такие - то флаг тебе в руки пользуй свои msxml и прочие монстроуозные либы везде где только можно, я же не буду стрелять из пушки по воробьям, там где это недопустимо. Извини, но мне зачастую кажется, что стремление к использованию чужого монструозного, но заведомо рабочего и "безупречного" - это от собственного неумения реализовать простейший алгоритм и лени. Как ты не можешь понять, что нельзя везде пихать COM, XML только из-за того, чтобы было крута и просто в реализации.
Есть другие платформы, наконец, отличные от Win. Расширяй кругозор, оно пригодится.
> Тривиальная задача решается уже второй день, куча кода,
> для которого потребуется еще куча другого кода.
> Для меня это дико и ненормально. А для вас?
>
>
У нас подобные задачи могут решаться и за 10 минут и за несколько дней или даже недель, все зависит от постановки задачи. Если стоит задача распарсить одну страницу раз в час, то сойдет и msxml, если стоит задача, заменять/выделять теги на скоростях в 10 Гбит, то приходится несколько дней искать места, где бы выиграть 5-10% загрузки CPU или ускорить и без того уже вылизанный код на те же 10%. Потому что поток в 10 Гбит/c и терабайты данных это не тот случай, где надо понтоваться с новомодными парсерами и технологиями.
← →
Медвежонок Пятачок © (2012-12-08 18:38) [52]Расширяй кругозор, оно пригодится.
Деточка, мой кругозор тебе знаешь куда не влезет?
Если задача должна решаться не на вин, то я ее не буду в твоем любимом рад делать.
Иди в ванную, пооптимизируй что - нибудь.
← →
Pcrepair © (2012-12-08 18:46) [53]
> а про то, грузится ли она вообще в дом.
вообще наверно грузится. но не в моей программе. там нет ни DOM, ни BOM ни чего еще
но образцово-показательный пример кода давай, посмотрим, измерим, сравним
← →
Медвежонок Пятачок © (2012-12-08 18:47) [54]Ты ссылку-то дашь или нет?
← →
DVM © (2012-12-08 18:47) [55]
> Медвежонок Пятачок © (08.12.12 18:38) [52]
> Расширяй кругозор, оно пригодится.
>
> Деточка, мой кругозор тебе знаешь куда не влезет?
Неприятно? Про потрындеть и пр. не я начал. Я лишь твой стиль общения принял.
Обидеть не хотел, извини.
← →
Pcrepair © (2012-12-08 18:57) [56]
> Ты ссылку-то дашь или нет?
ссылку на что? на страницу? так ведь уже сказано:
моя страница(точнее любая из триллиона страниц интернета)
выбери любую, можно прям эту, на которой все это пишем, вот и адрес:
http://delphimaster.net/view/1-1354822431/
← →
Anatoly Podgoretsky © (2012-12-08 18:59) [57]
> лучше приведи нормальный пример своей версии, с указанием
> используемых унитов и тд. чтоб можно было откомпилировать
> и посмотреть
Типовая разводка на слабо
← →
Медвежонок Пятачок © (2012-12-08 19:00) [58]ну не хочешь - не надо.
← →
Pcrepair © (2012-12-08 19:02) [59]
> ну не хочешь - не надо.
ты это о чем?
толян, ну чего ты опять не в свои дела лезешь? тебе же вредно волноваться
← →
Медвежонок Пятачок © (2012-12-08 19:05) [60]Я о том, что не надо прикидываться дятлом.
Разговор был про xtml страницу.
← →
Pcrepair © (2012-12-08 19:21) [61]Xtml? страницу??
ха-ха-ха
ты походу не отличаешь кырылиццу от латиницы, если для тебя ХТМЛ(оно же HTML) = xtml
с тобой все понятно, видимо выходные проходят не зря
← →
Медвежонок Пятачок © (2012-12-08 19:32) [62]3. ну вообщето речь идет об обработке кода в стандарте ХТМЛ, где на открывающий тег всегда есть закрывающий
http://ru.wikipedia.org/wiki/XHTML
иди давай, задрачивай, свой свой велокод.
← →
Pcrepair © (2012-12-08 20:02) [63]и чо? по русски не читаешь?
ХТМЛ это то же что и HTML, обрати внимание на последнюю букву ЛЛЛЛЛ
а стандарт HTML как раз и сообщает о том что тег <script> ВСЕГДА должен заканчиваться </script> - вот об этом речь шла
так что не гони
← →
Медвежонок Пятачок © (2012-12-08 20:04) [64]ты еще здесь?
а как же мегапроблема удаления скриптов?
← →
DVM © (2012-12-08 20:08) [65]
> Pcrepair © (08.12.12 19:21) [61]
> оно же HTML
так речь об HTML, а не XHTML?
> Медвежонок Пятачок © (08.12.12 19:32) [62]
он ведь действительно про HTML получается написал, а не про XHTML, зря мы тут ругались. Я тоже прочитал как XHTML.
← →
Медвежонок Пятачок © (2012-12-08 20:11) [66]ну значит все отменяется. драки не будет
← →
DVM © (2012-12-08 20:17) [67]
> Медвежонок Пятачок ©
а как же IHTMLDocument2 ? :)
← →
DVM © (2012-12-08 20:27) [68]
> Pcrepair ©
Раз речь об HTML, то задача несколько усложняется. Дело в то, что я как уже говорил, к некорректным HTML многие браузеры относятся очень лояльно, ведь их задача отобразить страницу, а не делать ей валидацию. Следовательно они глотают ошибки. Следовательно огромное количество страниц на реальных сайтах изобилует ошибками. Они не от неграмотности, они просто от невнимательности или случайных описок. Потом, в HTML слишком много вольностей, регистр тегов может быть разный, кавычки то есть то нет, то двойные то одинарные, и.т.д. ит.п. Поэтому у тебя 3 пути:
1) Пользоваться своей функцией (она будет максимально быстра, но в нынешнем виде имеет недостатки: регистрозависима, закрывающий тег ожидает после Script, ну еще там по мелочам).
2) Использовать регулярные выражения. Но выражение еще надо суметь написать. Кроме того, регулярные выражения обладают плохим свойством, если ими не пользоваться постоянно, перестаешь понимать написанное напрочь спустя время.
3) IHTMLDocument2
4) Сторонний DOM парсер.
← →
Pcrepair © (2012-12-08 20:28) [69]
> а как же мегапроблема удаления скриптов?
это для тебя мегапраблема, а у меня уже все работает
← →
Pcrepair © (2012-12-08 20:34) [70]ну вообще у меня есть набор кривых страниц, на обработке которых зависали прежние версии функций. текущая версия не виснет
что до регистрозависимость - ее нет, еще в модуле загрузчика есть Result:=AnsiLowerCase(Loader.Get(PageUrl));
тут некоторые удивлялись, зачем обработка исключений в цикле. может надо и не в цикле, но как раз для того "закрывающий тег ожидает после Script, ну еще там по мелочам"
так что если что не так то просто exit и фиг с этой страницей
← →
DVM © (2012-12-08 20:41) [71]
> Pcrepair © (08.12.12 20:34) [70]
А зачем ты вообще скрипты то вырезаешь, если не секрет?
← →
Pcrepair © (2012-12-08 21:00) [72]уже было:
- при загрузке страниц с фреймами нужно просто удалить теги скриптов со всем содержимым(там внутри есть теги frame src) чтоб не сбивать работу кода дозакачивающего страницы фреймов
← →
знайка (2012-12-08 21:06) [73]Вот как раз это пояснение совсем не понятное. про что тут, кто догадался? :)
← →
DVM © (2012-12-08 21:27) [74]
> Pcrepair © (08.12.12 21:00) [72]
я это видел, но я не понял, скрипты же только в браузере исполняются, как они тебе могут мешать, если ты страницы грузишь с помощью Indy?
← →
Pcrepair © (2012-12-08 21:36) [75]вот так они и мешают:
<script language="javascript">
<!--
var lct = location.href;
var indx = lct.indexof("?",0);
if (indx==-1) {
var newarray = new array(3)
newarray[0] = "news"; // var dir
newarray[1] = "index"; // var sub
newarray[2] = "index"; // var path
newarray[3] = "t"; // temp
newarray[4] = "t"; // temp
};
if (indx > 0) {
var prm = lct.substr(indx+1);
var regexp = /&/;
var newarray = prm.split(regexp);
};
var newcont = "<frameset rows="100,*" border=0 frameborder=0>";
newcont += " <frameset cols="150,*" border=0 frameborder=0>";
newcont += " <frame src="mn/logo.htm" border=0 frameborder=no scrolling=no noresize name="logo" marginwidth=0 marginheight=0>";
newcont += " <frameset rows="61,*" border=0 frameborder=0>";
newcont += " <frame src="mn/hd"+newarray[0]+".shtml" border=0 frameborder=no scrolling=no noresize name="title" marginwidth=0 marginheight=0>";
newcont += " <frame src="mn/"+newarray[0]+".shtml" border=0 frameborder=no scrolling=no noresize name="menu" marginwidth=0 marginheight=0>";
newcont += " </frameset>";
newcont += " </frameset>";
newcont += " <frameset cols="129,*" border=0 frameborder=0>";
newcont += " <frame src="mn/"+newarray[0]+"/"+newarray[1]+".shtml" border=0 frameborder=no scrolling=no noresize name="navg" marginwidth=0 marginheight=0>";
if (newarray[1]!="index") {
newcont += " <frame src=""+newarray[0]+"/"+newarray[1]+"/"+newarray[2]+".shtml" border=0 frameborder=no scrolling=auto name="work" marginwidth=0 marginheight=0>";
};
if (newarray[1]=="index") {
newcont += " <frame src=""+newarray[0]+"/"+newarray[2]+".shtml" border=0 frameborder=no scrolling=auto name="work" marginwidth=0 marginheight=0>";
};
newcont += " </frameset>";
newcont += "</frameset>";
document.write(newcont);
document.close();
//-->
</script>
у меня функция воостановления УРЛ и закачки страницы фрейма реагирует на frame src, соотвественно если не удалить скрипты то получится черти что
← →
DVM © (2012-12-08 21:46) [76]
> Pcrepair © (08.12.12 21:36) [75]
так, кажется начинаю понимать, а в целом что за задача? скачать сайт целиком и получить оффлайн его копию?
← →
Pcrepair © (2012-12-08 22:01) [77]нет конечно. для этих целей полно всяких программ
это поисковая программа типа краулера (шманьдекс,хугль и прочие поисковые машины), но персональная. задаешь детальное описание искомого (десятки слов) и нажимаешь большую красную кнопку "крякер интернета" и программа начинает искать. ищет час, два, пока все не обшарит, потом выдает УРЛ страниц наиболее релевантных тексту запроса в виде ХТМЛ-страницы в системный браузер. далее уже можно просмотреть чего там накопано
← →
Inovet © (2012-12-09 00:04) [78]> [77] Pcrepair © (08.12.12 22:01)
> ищет час, два, пока все не обшарит
Может год, два?
← →
Германн © (2012-12-09 02:16) [79]
> это поисковая программа типа краулера (шманьдекс,хугль и
> прочие поисковые машины), но персональная. задаешь детальное
> описание искомого (десятки слов) и нажимаешь большую красную
> кнопку "крякер интернета" и программа начинает искать.
Класс!
:)
← →
Anatoly Podgoretsky © (2012-12-09 11:26) [80]> Inovet (09.12.2012 00:04:18) [78]
Главное, что ищет ведь она для этого и предназначена, пусть ищет
Страницы: 1 2 вся ветка
Форум: "Основная";
Текущий архив: 2017.11.12;
Скачать: [xml.tar.bz2];
Память: 0.76 MB
Время: 0.004 c