Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2015, 21:33   #1
nibufep
Форумчанин
 
Регистрация: 02.08.2014
Сообщений: 476
По умолчанию Распарсить таблицу

Всем Доброго Дня! Столкнулся с проблемой.

Код:
<span>10:00</span>Текст текст тест<a href="/link" class="fin">Еще текст</a>
<span>10:10</span>Текст текст тест<a href="/link2" class="fin">Еще текст</a>
<span>10:20</span>Текст текст тест<a href="/link3" class="fin">Еще текст</a>
и тд.

Как в ListBox вывести это в таком виде:

Цитата:
10:00 Текст текст тест
10:10 Текст текст тест
10:20 Текст текст тест
nibufep вне форума Ответить с цитированием
Старый 09.02.2015, 21:47   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

MSHTML разрешается юзать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.02.2015, 21:51   #3
nibufep
Форумчанин
 
Регистрация: 02.08.2014
Сообщений: 476
По умолчанию

да, можно любыми способами))
nibufep вне форума Ответить с цитированием
Старый 09.02.2015, 21:57   #4
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Цитата:
Сообщение от nibufep Посмотреть сообщение
да, можно любыми способами))
Распарсить текст напрямую, если он разбит построчно:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
tmp: string;
begin
      for i:= 0 to Memo1.Lines.Count - 1 do
      begin
        tmp:= Copy(Memo1.Lines[i],
                   Pos('<span>',  Memo1.Lines[i]) + 6,
                   Pos('</span>', Memo1.Lines[i]) -
                   Pos('<span>',  Memo1.Lines[i]) - 6) + '  ' +
              Copy(Memo1.Lines[i],
                   Pos('</span>', Memo1.Lines[i]) + 7,
                   Pos('<a href', Memo1.Lines[i]) -
                   Pos('</span>', Memo1.Lines[i]) - 7);
        ListBox1.AddItem(tmp, nil);
      end;
end;
end.
Iron Monk вне форума Ответить с цитированием
Старый 09.02.2015, 22:09   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Такс... Тогда примерно так:
Код:
var d:IHTMLDocument2; l: IHTMLElementCollection; innerHTML:Variant; i:integer;
begin
  d:=IHTMLDocument2(CoHTMLDocument.Create);
  innerHTML:=VarArrayCreate([0,0],varVariant);
  innerHTML[0]:=Content; //Тут твой HTML';
  d.write(PSafeArray(TVarData(innerHTML).VArray));
  d.close;
  l:=d.links;
  for i:=0 to l.length do begin
    ListBox.AddItem(l.Item(i).innerText);
  end;
end;
Единственный момент - span. Я так сразу не скажу как сюда его приплести, но могу порекомендовать свой проходчик по странице в принципе: http://www.programmersforum.ru/showthread.php?t=262558
Попробуй разобраться, вдруг поможет
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.02.2015, 22:10   #6
exn
Пользователь
 
Регистрация: 06.02.2011
Сообщений: 51
По умолчанию

Или так. )
Код:
procedure TForm2.Button1Click(Sender: TObject);
var s: String;
begin
   s := '<span>10:00</span>Текст текст тест<a href="/link" class="fin">Еще текст</a>'  +
        '<span>10:10</span>Текст текст тест<a href="/link2" class="fin">Еще текст</a>' +
        '<span>10:20</span>Текст текст тест<a href="/link3" class="fin">Еще текст</a>';

   with TRegExpr.Create do try

      Expression := 'span>(.+?)</span>(.+?)<a href.+?class="fin">(.+?)</';

       if Exec(s) then repeat
         ListBox1.Items.Add(Match[1] + ' ' + Match[2] + ' ' + Match[3]);
       until not ExecNext;

   finally Free;
   end;
end;

Последний раз редактировалось exn; 09.02.2015 в 22:23.
exn вне форума Ответить с цитированием
Старый 09.02.2015, 22:23   #7
nibufep
Форумчанин
 
Регистрация: 02.08.2014
Сообщений: 476
По умолчанию

exn,
Регулярки вещь)) Спасибо!
А еще в это таблице попадаются ссылки вот такого вида:

Цитата:
<span class="live">10:30</span><img src="img.gif" class="class-serve" />Текст текст тест<a href="/link5" class="live">Еще текст</a>
Можно их как то сразу обрабатывать и такой и такой вид?

Что нельзя сразу так сделать?

Последний раз редактировалось Stilet; 10.02.2015 в 11:49.
nibufep вне форума Ответить с цитированием
Старый 10.02.2015, 10:03   #8
SQLPowerUser
Форумчанин
 
Аватар для SQLPowerUser
 
Регистрация: 19.01.2015
Сообщений: 158
Вопрос Так?

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  s, s_res: string;
begin
  Memo1.Clear;
  s := '<span class="live">10:30</span><img src="img.gif" class="class-serve" />Текст текст тест<a href="/link5" class="live">Еще текст</a>';

  while Pos('>',s) > 0 do
  begin
    s := Copy(s,Pos('>',s)+1,length(s));
    s_res := Copy(s,0,Pos('<',s)-1);
    if Trim(s_res) <> '' then
      Memo1.Lines.Add(s_res);
  end;
end;

Последний раз редактировалось SQLPowerUser; 10.02.2015 в 10:07.
SQLPowerUser вне форума Ответить с цитированием
Старый 10.02.2015, 11:27   #9
exn
Пользователь
 
Регистрация: 06.02.2011
Сообщений: 51
По умолчанию

Цитата:
Сообщение от nibufep Посмотреть сообщение
Что нельзя сразу так сделать?
Можно!
http://regexpstudio.com/RU/TRegExpr/...xp_Syntax.html
Изучай!
exn вне форума Ответить с цитированием
Старый 10.02.2015, 14:07   #10
NIKOLAYY2
Форумчанин
 
Регистрация: 23.12.2014
Сообщений: 220
По умолчанию

Цитата:
Как в ListBox вывести это в таком виде:
При помощи регулярки- такой парс пишется 2 минуты, абсолютно без проблем.
NIKOLAYY2 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
распарсить сторку bulldog5293 Общие вопросы Delphi 9 18.02.2011 23:57
Распарсить строку bulldog5293 Работа с сетью в Delphi 7 18.12.2010 19:25
Распарсить прайс Sanyo Microsoft Office Excel 7 13.11.2009 17:01
Помогите распарсить строку Alexander1991 Помощь студентам 1 08.03.2009 22:33
Распарсить HTML Табурет Общие вопросы C/C++ 11 02.03.2008 19:26