Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.12.31;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.078 c
4-1156501872
Тфьу
2006-08-25 14:31
2006.12.31
Как отловить ошибку макроса Excel?


2-1165697465
arturich
2006-12-09 23:51
2006.12.31
Таймер


15-1165593519
wl
2006-12-08 18:58
2006.12.31
вот, ищу работу програмистом. в москве...


2-1165403972
DelphiLexx
2006-12-06 14:19
2006.12.31
Commit


15-1165432569
tesseract
2006-12-06 22:16
2006.12.31
Кто курит трубку?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский