Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.02.2013, 14:06
Pcrepair
 
Сообщения: n/a
По умолчанию Удаление подстрок из строки за один проход

Добрый день. Есть функция на основе цикла 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  
Старый 10.02.2013, 14:18
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

а самому разобраться как работает функция и найти ошибку никак? не так уж и много строк.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 10.02.2013, 15:46
Pcrepair
 
Сообщения: n/a
По умолчанию

функция и так моя, разбирался как мог, теперь твоя очередь.
Ответить с цитированием
  #4  
Старый 10.02.2013, 15:53
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
Смех

вот это читал:
Цитата:
Сообщение от Dimitry Sibiryakov
Эта процедура написана не программистом. Переписать с нуля.
???
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 10.02.2013, 16:00
Pcrepair
 
Сообщения: n/a
По умолчанию

вообщето там функция а не процедура
ну и сам по себе ответ какойто.... ну обойдемся без мата
если уж вылез кто со своим мнением, так уж поведай что конкретно не так, а обобщать не надо
Ответить с цитированием
  #6  
Старый 10.02.2013, 16:45
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

для Delphi 7 http://zalil.ru/34247888

Код:
uses
  Unit2,
...
Edit1.Text:=NumLockStr('1<script>2</script>3 4<script>5</script>6', 'script');
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:51.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025