Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.31;
Скачать: CL | DM;

Вниз

Удаление подстроки в строке. Выборочное.   Найти похожие ветки 

 
Strori   (2006-12-09 14:45) [0]

Привет всем.
Нужно удалить лишние вещи из html файла (не нужные теги). Есть код, удаляющий вообще все, что находится между символами <>
var str, str1, str2, teg: string;

procedure EditView;
var n, m, s, i, q: integer;
begin
 str:=Form1.Memo1.Lines.Text;
  for i := 1 to Length(Form1.Memo1.Text) do
   if Form1.Memo1.Text[i] = "<" then
    begin
     str1:="<";
     n:=pos(str1, str);
     str2:=">";
     m:=pos(str2, str);

     s:=(m-n)-1;
     delete(str, n+1, s);
     delete(str, n+1, 1);
     delete(str, n, 1);
   end;
Form1.Memo1.Lines.Text:=str;
   end;

Код работает. Но удалять нужно не все. Допустим теги , <p></p> и т.д. нужно оставить на своих местах. Вот тут я застрял. Не подскажете в каком направлениее двигаться?


 
Джо ©   (2006-12-09 14:49) [1]

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

В направлении т.н. «конечных автоматов», например. А собственно удалением и поиском будут заниматься все теже функции Pos and Copy/Delete.


 
Strori   (2006-12-09 15:10) [2]

А подробнее? Чего это такое?


 
Джо ©   (2006-12-09 15:12) [3]

> [2] Strori   (09.12.06 15:10)
> А подробнее? Чего это такое?

yandex.ru «конечные автоматы». Очень много ссылок будет. Описать принцип «в двух словах» не берусь.


 
Strori   (2006-12-09 15:41) [4]

Нехило... А попроще никак нельзя?


 
Anatoly Podgoretsky ©   (2006-12-09 16:08) [5]

> Strori  (09.12.2006 15:41:04)  [4]

У тебя код странный, зачем то какое то множественное удаление, аж 4 раза подряд

А что значит попроще, растолкуй данный термин.


 
Strori   (2006-12-10 03:44) [6]

Попроще я думал примерно так: по тому же принципу что в коде,  определяется переменная teg равная содержимому между n и m - то есть собственно тег. И если эта переменная равна скажем <p> то цикл прерывается и начинается с нового i - то есть со следующего значения "<". Но такой вариант не работает. Насколько я понял, потому что Length(Form1.Memo1.Text) величина постоянная, определяемая один раз перед началом цикла. А вот переменная str:=Form1.Memo1.Lines.Text;, от которой происходит определение номера символов n и m - она в конце каждого цикла обновляется. Почему - я не знаю... И получается, что i принимается по первоначальному числу символов в Memo1.Text, а номера символов n и m принимаются уже по обновленному значению Form1.Memo1.Lines.Text. Из-за чего происходит смещение на число удаленных символов в первом цикле. Ну дальше больше и бредятина полная в итоге. Вот я и думал, что может кто подскажет как справиться с этим смещением... Или есть иные варианты на той же основе. Без применения наворотов.

А про удаление вы правы, достаточно будет одной строки. Поправлю.


 
Virgo_Style ©   (2006-12-10 09:28) [7]

Если не хочется разбираться, то можно заняться извратом -
StringReplace <p> на, к примеру, [p], потом удалить все, что в угловых скобках, потом заменить обратно.
Это изврат, конечно, но более-менее работоспособный (если в исходном тексте нет включений [p]).

Кстати, цикл for тебе, afaik, не подойдет в силу того, что у тебя в теле цикла изменяется Length(...Text), а цикл for будет использовать его начальное значение.


 
Strori   (2006-12-10 11:20) [8]

А как быть тогда?


 
Loginov Dmitry ©   (2006-12-10 11:49) [9]

Есть код, удаляющий вообще все, что находится между символами <>

То есть он удалит к примеру из тэга <img scr="image.png"> весь текст
а угловые скобки <> оставит? Так что-ли?


 
Anatoly Podgoretsky ©   (2006-12-10 11:50) [10]

> Loginov Dmitry  (10.12.2006 11:49:09)  [9]

Он так и делал, сначала удалял внутри, потом левую скобку, потом правую


 
Strori   (2006-12-10 14:02) [11]

Короче, не работает. :)
Ладно, будем искать... Спасибо всем.



Страницы: 1 вся ветка

Текущий архив: 2006.12.31;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.048 c
2-1166039905
Khabibulin
2006-12-13 22:58
2006.12.31
Закраска в StringGrid


2-1165837189
YuMB
2006-12-11 14:39
2006.12.31
Как программно выключить компьютер?


2-1165790592
IGray
2006-12-11 01:43
2006.12.31
Хочу компилить BPG из командной строки (т.е. все пакеты)


2-1165772072
Kostafey
2006-12-10 20:34
2006.12.31
Получение результатов работы SQL-запроса


15-1165475150
codeCleaner
2006-12-07 10:05
2006.12.31
Удобочитаем ли следующий код?