Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Удаление подстроки между двумя тегами


Автор: Gorets 11.7.2006, 00:05
нужно в тексте удалить все подстроки от "строка1" до "строка2"
т.е. исходная строка "123456789123456789"
начало диапазона удаления "23"
конец диапазона удаления  "7"

в итоге должна получиться строка "189189"

может есть готовая функция?
 

Автор: volvo877 11.7.2006, 00:31
Цитата(Gorets @  11.7.2006,  00:05 Найти цитируемый пост)
может есть готовая функция?
Может и есть, только проще и быстрее будет написать самому:
Код
function DeleteBetween(s, tag_start, tag_finish: string): string;
var
  finished: boolean = false;
  p1, p2: integer;
begin
  repeat
    p1 := pos(tag_start, s); p2 := pos(tag_finish, s);
    if (p1 * p2 > 0) and (p2 > p1) then
      delete(s, p1, p2 - p1 + length(tag_finish))
    else finished := true;
  until finished;
  result := s;
end;

...
// Вызов
s := DeleteBetween('123456789123456789', '23', '7');
...
 

Автор: Gorets 11.7.2006, 13:33
не все так галадко с определением p2 := pos(tag_finish, s);
если  в тексте до tag_start встретится tag_finish то функция не сработает...
надо каким то образом начинать поиск tag_finish начиная с позиции p1

попробуй пропарсить такой текст
Код

<table width="90%" border=1><tr><th><small><a href="/index.php?m=services.transppl.schedule&amp;f=Schedule.Stan&amp;T2=22000&amp;sort=1&lng=uk">Номер поїзда</a></th>
<th><small><a href="/index.php?m=services.transppl.schedule&amp;f=Schedule.Stan&amp;T2=22000&amp;sort=2&lng=uk">Маршрут</a></th>
<th><small><a href="/index.php?m=services.transppl.schedule&amp;f=Schedule.Stan&amp;T2=22000&amp;sort=1&lng=uk">Перiодичнiсть</a></th>
<th><small><a href="/index.php?m=services.transppl.schedule&amp;f=Schedule.Stan&amp;T2=22000&amp;sort=3&lng=uk">Час приб.</a></th>
<th><small><a href="/index.php?m=services.transppl.schedule&amp;f=Schedule.Stan&amp;T2=22000&amp;sort=4&lng=uk">Час вiдпр.</a></th>
<th><small><a href="/index.php?m=services.transppl.schedule&amp;f=Schedule.Stan&amp;T2=22000&amp;sort=5&lng=uk">Прибуття на кінцеву станцію</a></th>
 

при tag_start='<a href' и tag_finish='>'  

Автор: volvo877 11.7.2006, 15:08
Попробуй тогда вот это:
Код

function DeleteBetween(s, tag_start, tag_finish: string): string;
var
  finished: boolean = false;
  p1, p2: integer;
begin
  repeat
    p1 := pos(tag_start, s);
    p2 := p1 + pos(tag_finish, copy(s, p1, length(s))) - 1; // Это нужно было добавить
    if (p1 * p2 > 0) and (p2 > p1) then
      delete(s, p1, p2 - p1 + length(tag_finish))
    else finished := true;
  until finished;
  result := s;
end;
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)