Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11634
Последний выпуск: 19.06.2015

Удаление HTML элементов из текста.

www.исходники.ru

Как-то раз пришлось решить задачу удаления из файла элементов HTML таких, как, например, ненужные ссылки, и в то эе время преобразования возврата каретки в HTML параграфы, знаков табуляции в пробелы и т.д. В результате соответственно должен был получиться новый HTML документ.

Следующие две процедуры показывают, как это можно сделать:

Листинг:

procedure TMainForm.LoadFileIntoList(TextFileName:String;
                                     AWebPage:TStringList;
                                     WithFilter:Boolean); 
var CurrentFile : TStringList; 
begin 
   CurrentFile := TStringList.Create; 
   CurrentFile.LoadFromFile(TextFileName); 
   if WithFilter then 
      FilterHTML(CurrentFile,AWebPage) 
   else 
      with AWebPage do AddStrings(CurrentFile); 
   CurrentFile.Free; 
end; 

procedure TMainForm.FilterHTML(FilterInput, AWebPage:TStringList); 
var 
   i,j : LongInt; 
   S   : String; 
begin 
   FilterMemo.Lines.Clear; 
   FilterMemo.Lines := FilterInput; 

   with AWebPage do 
   begin 
      FilterMemo.SelectAll; 
      j := FilterMemo.SelLength; 

      if j > 0 then 
      begin 
         i := 0; 
         repeat 
// ищем cr 
            if FilterMemo.Lines.GetText[i] = Char(VK_RETURN)
            then S := S+'' 
            else if FilterMemo.Lines.GetText[i] = '<' 
                 then repeat 
                         inc(i); 
                      until FilterMemo.Lines.GetText[i] = '>' 
// ищем tab 
                 else if FilterMemo.Lines.GetText[i] = Char(VK_TAB)
                      then S := S+'    ' 
// добавляем текст 
                      else S := S+ FilterMemo.Lines.GetText[i];
            inc(i); 
         until i = j+1; 
         Add(S);     // добавляем строку в WebPage 
      end else Add('No data entered into field.');   // no data in text file 
   end; 
end; 

Применение функции:

Всё, что нужно сделать - это вызвать :

LoadFileIntoList("filename.txt",Webpage, True); 

Где,

  • filename - это имя файла, который вы хотите обработать.
  • "WebPage" - это TStringList
  • последний параметр в функции указывает, применять или нет HTML-фильтр.

PS: В этом примере объект TMemo (который вызывается из "FilterMemo") лежит на форме и поэтому не видим.

Пример:

   WebPage := TStringList.Create; 
   try 
      Screen.Cursor := crHourGlass; 
      AddHeader(WebPage); 
      with WebPage do 
      begin 
         Add('Personal Details');         
         LoadFileIntoList("filename.txt",Webpage, True); 
      end; 
      AddFooter(WebPage); 
   finally 
      WebPage.SaveToFile(HTMLFileName); 
      WebPage.Free; 
      Screen.Cursor := crDefault; 
   end; 

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 

Комментарии

1.
Аноним
Мне нравитсяМне не нравится
17 августа 2005, 18:29:22
Да, для таких задач лучше пользовать Perl с регулярными выражениями - и компактнее и красивше :)
2.
Аноним
Мне нравитсяМне не нравится
23 июля 2005, 19:25:19
Serge, по-сути, замечание верное, но... пример не подходящий - на нем ошибка не проявится.
Более наглядна следующая последовательность:

<html>
...
<script>
// comment
code
code
code
</script>

Реально - следует добавить обработку (удаление) комментариев. Как однострочных, так и многострочных
3.
Аноним
Мне нравитсяМне не нравится
22 июля 2005, 02:21:09
Однако не всё верно ...
---------8<-------------
...
<body>
V1
<script>
var a;
var b;
if(a<b) b=a;
if(a>b) a=b;
</script>

<h1>SOME TEXT</H1>

</body>
....
---------8<-------------
Что здесь имеется ввиду, кто догадается?
Вот именно, нужно строить иерархический набор объектов при входе в область действия тага и знать в зависимости от тага специфику использования разделяющих символов ...
А то мало того - весь скрипт наружу, так ещё и его обкорнает:
...
V1
var a;
var b;
if(ab) a=b;
SOME TEXT
...
Ну хотя бы при входе в <script искать его </script>.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог