Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> удаление html тегов и кода html, какой лучший способ и быстрый? 
V
    Опции темы
Fedia
Дата 30.9.2006, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 8
Всего: 13



Цитата(BUGOR @  30.9.2006,  15:30 Найти цитируемый пост)
зато какая элегнтость достигается с использованием regexpr

С этим не поспоришь. Разработчики TRegExpr потрудились на славу. Думаю, если бы они решали задачу исключительно удаления тегов, то преодолеть скоростные характеристики их решения было бы трудновато.
Elfebet, если уж вопрос стоит так: 
Цитата

какой лучший способ и быстрый?
, то для ускорения моей функции могу посоветовать поискать ускоренные аналоги стандартной функции Pos.


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
BUGOR
Дата 1.10.2006, 06:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 12.3.2006

Репутация: 5
Всего: 16



Цитата

то для ускорения моей функции могу посоветовать поискать ускоренные аналоги стандартной функции Pos.


Вряд ли это возможно, pos написана в виде ассемблерной вставки и довольно хорошо оптимизирована, может ты быть её можно ускорить на какие-то 10%, но это надо очень прилично извратиться имхо, а смысла в этом особого нет.


--------------------
Живу недоумевая, всё время хочу понять...
http://hunger.ru 
PM MAIL WWW ICQ   Вверх
Fedia
Дата 1.10.2006, 06:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 8
Всего: 13



Цитата(BUGOR @  1.10.2006,  06:24 Найти цитируемый пост)
Вряд ли это возможно, pos написана в виде ассемблерной вставки и довольно хорошо оптимизирована, может ты быть её можно ускорить на какие-то 10%

Где-то с 1-1.5 года назад на др. форуме встречал ссылку на рейтинг функций, аналогов Pos. Рейтинг выставлялся в зависимости от скорости поиска субстроки в заранее разработанных тестовых примерах. Разница по скорости у топовых функций по сравнению со стандартной Pos была значительна (точно не помню процентных соотношений, но более 10% точно). При реализации этих функций разработчики делали акцент не только на ассемблере, но и на модификации алгоритма поиска.


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
Quadr0
Дата 1.10.2006, 22:35 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...

Это сообщение отредактировал(а) Quadr0 - 15.7.2011, 13:04
  Вверх
Fedia
Дата 1.10.2006, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 8
Всего: 13



Цитата(Quadr0 @  1.10.2006,  22:35 Найти цитируемый пост)
Причём происходит это каждую итерацию цикла. На крайняк надо уж concat использовать.

Каждую итерацию цикла ? Код внимательно смотрел ?


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
Quadr0
Дата 1.10.2006, 23:06 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...

Это сообщение отредактировал(а) Quadr0 - 15.7.2011, 13:05
  Вверх
Fedia
Дата 1.10.2006, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 8
Всего: 13



Цитата(Quadr0 @  1.10.2006,  22:35 Найти цитируемый пост)
Вот такие действия приводят к большим перераспределниям памяти, потому как в памяти образуется новая строка, куда копируются две остальные.

Цитата(Quadr0 @  1.10.2006,  23:06 Найти цитируемый пост)
То код уже не оптимален.

Согласен, но случаи, когда используется эта строчка кода достаточно редки, поэтому ее оптимизацией я пренебрег.
Цитата(Quadr0 @  1.10.2006,  22:35 Найти цитируемый пост)
Около 50 МБ HTML'a конвертит менее минуты. 

Попробую потестить.


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
Fedia
Дата 2.10.2006, 02:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 8
Всего: 13



Цитата(Quadr0 @  1.10.2006,  22:35 Найти цитируемый пост)
Около 50 МБ HTML'a конвертит менее минуты.

Твой вариант на самом деле оказался фантастически быстр. Пару часов я пытался доработать свою функцию, пытаясь преодолеть скоростную планку твоей. Но как оказалась только применение Pos из моей функции работает дольше всей твоей функции целиком, не говоря уже об остальной части с delete, Copy, сложением строк и т.д. Твоя функция работала в пару сотен раз быстрее smile
Поэтому я решил вообще написать функцию с нуля другим способом, без сдвигов и копирований: 
Код

function DelTeg(s: String): String;
var
  InTeg: Boolean;
  i, len, NotInTegC: Integer;
begin
  len:=Length(s); NotInTegC:=0; InTeg:=False;
  SetLength(Result, len);
  for i:=1 to Length(s) do
  begin
    if s[i]='<' then
    InTeg:=True else
    if InTeg and (s[i]='>') then
    InTeg:=False else
    if not InTeg then
    begin
      Inc(NotInTegC);
      Result[NotInTegC]:=s[i];
    end;
  end;
  SetLength(Result, NotInTegC);
end;
 и с Божьей помощью удалось преодолеть скоростные характеристики твоей функции в несколько раз  smile 


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
Elfebet
Дата 2.10.2006, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 545
Регистрация: 15.5.2006
Где: Украина. Запорожь е.

Репутация: 2
Всего: 14



FediaQuadr0, ребята ну спасибки вам smile 
зы Fedia +1
Quadr0 +1


--------------------
Программист не должен всё знать... он должен знать где можно посмотреть
PM MAIL ICQ GTalk   Вверх
Fedia
Дата 2.10.2006, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 8
Всего: 13



Цитата(Yanis @  2.10.2006,  10:14 Найти цитируемый пост)
Fedia, спасибо за замечание

Всегда пожалуйста smile

Цитата(Elfebet @  2.10.2006,  11:05 Найти цитируемый пост)
Fedia, Quadr0, ребята ну спасибки вам  
зы Fedia +1
Quadr0 +1

И почему "+" так приятно получать ?  smile


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
Quadr0
Дата 2.10.2006, 13:07 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...

Это сообщение отредактировал(а) Quadr0 - 15.7.2011, 13:06
  Вверх
Fedia
Дата 3.10.2006, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 8
Всего: 13



Цитата(Quadr0 @  2.10.2006,  13:07 Найти цитируемый пост)
куча проверок на условия - зло

Это не самое страшное зло smile

Цитата(Quadr0 @  2.10.2006,  13:07 Найти цитируемый пост)
От меня плюс за не лень.

Спасибо !


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
BetaCoder
  Дата 5.4.2009, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 4.4.2009

Репутация: нет
Всего: нет



А как в последнем коде сделать чтобы кроме начального и завершающего тега <  и  >  отсеивался еще  { и } ,   [ и  ] и такая конструкция & и ; ? Это актуально для форумов, там же ВВ коды, их тоже как-но надо отсеивать.

Ну не копировать же под каждый тег свою функцию...
PM MAIL   Вверх
MetalFan
Дата 5.4.2009, 16:24 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



BetaCoder, некрофил чтоли? ))


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Alix
Дата 6.4.2009, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: 7
Всего: 23



На скорую руку:
Код
function DelTags(s: String): String;
var
  i,
  len,
  currentPos: Integer;

begin
  len := Length(s);
  currentPos := 1;

  SetLength(Result, len);

  i := 1;
  while i <= len do
  begin
    case s[i] of
      '<':
        begin
          inc(i);
          while (s[i] <> '>') and (i < len) do
            inc(i);
        end;

      '{':
        begin
          inc(i);
          while (s[i] <> '}') and (i < len) do
            inc(i);
        end;

      '[':
        begin
          inc(i);
          while (s[i] <> ']') and (i < len) do
            inc(i);
        end;

      '&':
        begin
          inc(i);
          while (s[i] <> ';') and (i < len) do
            inc(i);
        end

      else
      begin
        result[currentPos] := s[i];
        inc(currentPos);
      end;
    end;

    inc(i);
  end;

  SetLength(Result, currentPos - 1);
end;
Вот только нафига удалять столько всего нужного... И оставлять столько ненужного (например скрипты между <script>).


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0824 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.