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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2014, 18:35   #1
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию парсинг HTML кода

нашел компонент easynet.zip , надо как-то пропарсинговать код:

это результат в Memo1:

Код:
<td>Лицевой счет</td>
2508431
<td>Абонент</td>
Безконтрактний абонент
<td>Номер телефона</td>
0569989487
<td>Состояние</td>
Активен
<td>Тарифный план</td>
<a href="http://www.intertelecom.ua/ru/tariffs/internet/tariffs/day_gig">                                                        Гига-День 150
<td>Дополнительное соглашение</td>
Нет
<td>Дата подключения</td>
04.10.2012
<td>Абонентский стаж (гг.мм)</td>
1.4
<td>Лояльный стаж (гг.мм)</td>
1.4
<td>Дата последней абонентской активности (мм.гггг)</td>
03.02.2014
<td>Контактный номер телефона</td>
0632232945 <a href="/ru/cp-bonus/">Изменить</a>
<td>E-Mail</td>
beegl1985@rambler.ru
(грн.)
<td>Сальдо</td>
-18.20
<td>Предоплаченые услуги на месяц</td>
0.00
<td>Кредит до...</td>
-30.00
<td>Неактивированные бонусы (с 094)</td>
0.00
<td>Правило (USER_NAME)</td>
Трафик МБ (получено+передано)
<td>IT</td>
3968
<td>NO_MONEY</td>
4
<td>Текущая сессия интернет без тарификации <br />(по состоянию на 05.02.2014 16:16)</td>
EVDO
<td>Авторизован по правилу (логин)</td>
IT (IT)
<td>Трафик МБ</td>
<strong>        37.612</strong>
<td>IP</td>
10.133.244.140
<h2 class="assa_title">Предоплачено на пакете</h2>
<table class="assa" border="0" cellspacing="0" cellpadding="0">
<td>Трафик (без учета текущей сессии)</td>
<td style="color:;">(МБ)</td>
<td>Ночной трафик (Rev.A)</td>
<td style="color:#000000;">29114.6816 по 28.02.2014</td>
<td>пакетный трафик (Rev.A/Rev.B)</td>
<td style="color:#000000;">400.0000 по 05.02.2014</td>
<td>пакетный трафик (Rev.A/Rev.B)</td>
<td style="color:#000000;">1688.1064 по 05.02.2014</td>
нужен примерно такой результат:

Код:
Лицевой счет: 2508431
Абонент: Безконтрактний абонент
Номер телефона:0569989487
Состояние: Активен
Тарифный план: Гига-День 150
Дополнительное соглашение: Нет
Дата подключения: 04.10.2012
Абонентский стаж (гг.мм): 1.4
Лояльный стаж (гг.мм): 1.4
Дата последней абонентской активности (мм.гггг): 03.02.2014
Контактный номер телефона: 0632232945
E-Mail: beegl1985@rambler.ru
Сальдо: -18.20 грн
Предоплаченые услуги на месяцЖ 0.00
Кредит до...: -30.00
Неактивированные бонусы (с 094): 0.00
Правило (USER_NAME): Трафик МБ (получено+передано)
IT: 3968
NO_MONEY: 4
Текущая сессия интернет без тарификации(по состоянию на 05.02.2014 15:16): EVDO
Авторизован по правилу (логин)
IT (IT)
Трафик МБ: 9.890
IP: 10.133.244.140
Предоплачено на пакете Трафик (без учета текущей сессии): (МБ)
Ночной трафик: 29114.6816 по 28.02.2014
пакетный трафик (Rev.A/Rev.B): 400.0000 по 05.02.2014
пакетный трафик (Rev.A/Rev.B): 1688.1064 по 05.02.2014
beegl вне форума Ответить с цитированием
Старый 05.02.2014, 18:41   #2
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

удалите все теги и все. в интернете море примеров.
Кольша вне форума Ответить с цитированием
Старый 05.02.2014, 19:09   #3
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию

Цитата:
Сообщение от Кольша Посмотреть сообщение
удалите все теги и все. в интернете море примеров.
нашел какую-то функцию:

Код:
function ConvertHTML(AInput: WideString): WideString;
var
  Len, WriteLen, ReadPos, OldPos, WritePos: integer;
begin
  Len := Length(AInput);
  if Len = 0 then
    Exit;
  SetLength(Result, Len);
  ReadPos := 1;
  WritePos := 1;
  while ReadPos < Len do
  begin
    OldPos := ReadPos;
    while (AInput[ReadPos] <> WideChar('<')) and (ReadPos < Len) do
      Inc(ReadPos);
    WriteLen := ReadPos - OldPos;
    if WriteLen > 0 then
    begin
      Move(AInput[OldPos], Result[WritePos], WriteLen*2);
      Inc(WritePos, WriteLen);
    end;
    while (AInput[ReadPos] <> WideChar('>')) and (ReadPos < Len) do
      Inc(ReadPos);
    Inc(ReadPos);
  end;
  SetLength(Result, WritePos - 1);
end;
результат такой:

Код:
Лицевой счет
2508431
Абонент
Безконтрактний абонент
Номер телефона
0569989487
Состояние
Активен
Тарифный план
                                                        Гига-День 150
Дополнительное соглашение
Нет
Дата подключения
04.10.2012
Абонентский стаж (гг.мм)
1.4
Лояльный стаж (гг.мм)
1.4
Дата последней абонентской активности (мм.гггг)
03.02.2014
Контактный номер телефона
0632232945 Изменить
E-Mail
beegl1985@rambler.ru
(грн.)
Сальдо
-18.20
Предоплаченые услуги на месяц
0.00
Кредит до...
-30.00
Неактивированные бонусы (с 094)
0.00
Правило (USER_NAME)
Трафик МБ (получено+передано)
IT
3968
NO_MONEY
4
Текущая сессия интернет без тарификации (по состоянию на 05.02.2014 17:01)
EVDO
Авторизован по правилу (логин)
IT (IT)
Трафик МБ
        47.603
IP
10.133.244.140
Предоплачено на пакете

Трафик (без учета текущей сессии)
(МБ)
Ночной трафик (Rev.A)
29114.6816 по 28.02.2014
пакетный трафик (Rev.A/Rev.B)
400.0000 по 05.02.2014
пакетный трафик (Rev.A/Rev.B)
1688.1064 по 05.02.2014
надо теперь как-то выровнять текст, и некоторые пункты убрать, например:

Лицевой счет: 2508431 (чтобы не с новой строчки номер был)

эти строчки не нужны:

Код:
IP
10.133.244.140
Предоплачено на пакете

Трафик (без учета текущей сессии)
(МБ)
beegl вне форума Ответить с цитированием
Старый 05.02.2014, 21:02   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

ну так уберите, в чем проблема...
Человек_Борща вне форума Ответить с цитированием
Старый 05.02.2014, 21:21   #5
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
ну так уберите, в чем проблема...
подскажите каким методом можно убрать?
beegl вне форума Ответить с цитированием
Старый 05.02.2014, 23:43   #6
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Цитата:
Сообщение от beegl Посмотреть сообщение
подскажите каким методом можно убрать?
Я вроде показал в коде как это делается...
Код:
or (itemstr = 'то что не нужно занесите сюда')
ZuBy вне форума Ответить с цитированием
Старый 06.02.2014, 00:17   #7
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию

Цитата:
Сообщение от ZuBy Посмотреть сообщение
Я вроде показал в коде как это делается...
Код:
or (itemstr = 'то что не нужно занесите сюда')
напишите пожалуйста краткий пример, что-то не понятно, т.к. все не нужные теги вписаны, но в отчете они присуцтвуют

Код:
 if (itemstr = '') or (itemstr = '</td>') or (itemstr = 'h1>Данные по номеру</h1>') or
      (itemstr = '<h2 class="assa_title"><!--Данные по номеру--></h2>') or (itemstr = '</tr>') or (itemstr = '<tr class="">') or
      (itemstr = '<td style="color:#000000;">') or (itemstr = '<tr>') or (itemstr = '</tbody></table>') or (itemstr = '<br />') or
      (itemstr = '</table>') or (itemstr = '<table class="assa" border="0" cellspacing="0" cellpadding="0"><tbody>') or
      (itemstr = '<td>.</td>') or (itemstr = '<td></td>') or (itemstr = '<tr >') or (itemstr = '<tr class="line">') or
      (itemstr = '<tr class="title">') or (itemstr = '<td style="color:;">') or
      (itemstr = '</a>                                                    						</td>') or
      (itemstr = '<td style="color:#007236;">') or (itemstr = '<td>-</td>') or (itemstr = '<td style="color:#FF0000;">') then
      ProStr.Delete(i)
    else
результат все эти теги отображает, что не так?

Последний раз редактировалось beegl; 06.02.2014 в 00:43. Причина: добавил текст
beegl вне форума Ответить с цитированием
Старый 07.05.2015, 18:17   #8
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию

добрый час, подскажите, как парсить, если одинаковое условие, по акции (Rev.A/Rev.B), ..

на скрине отчет, где множеством заказов 'бонусов'



я так проверяю, но выводит результат первой строки по акции (Rev.A/Rev.B), а следующие не показывает (не затрагивает).

Подскажите, как проциклить строку по акции (Rev.A/Rev.B) и вывести в сообщение?

Код:
TrafficBonusTwo := Trim(List.Values['по акции (Rev.A/Rev.B)']);
  pbt := Pos(' ', TrafficBonusTwo);
  if (pbt > 0) then
  TrafficBonusTwo := Copy(TrafficBonusTwo, 1, pbt - 6);

  TrafficBonusThree := Trim(List.Values['по акции (Rev.A/Rev.B)']);
  pbth := Pos(' ', TrafficBonusThree);
  if (pbth > 0) then
  TrafficBonusThree := Copy(TrafficBonusThree, 1, pbth - 6);
Код:
ShowMessage(Traffic + '   '+ TrafficBonus  + '    '+ TrafficBonusTwo+'    ' +  TrafficBonusThree+ '    '+TrafficSesia);
где: - по акции (Rev.A/Rev.B)
- TrafficBonus (разное количество)
- TrafficBonusTwo (разное количество)
- TrafficBonusThree (разное количество)
beegl вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсинг html... kta87 Общие вопросы Delphi 3 06.04.2012 12:13
парсинг HTML Gregor HTML и CSS 0 07.10.2011 09:24
Парсинг HTML russian-stalker Общие вопросы C/C++ 0 18.12.2010 11:25
Парсинг html кода LT. Общие вопросы .NET 2 01.07.2010 07:30
Выдернуть куски кода из html-кода trafbite Помощь студентам 7 18.08.2007 13:51