Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как же выдрать нужный кусочем html кода. [D7, WinXP]


Страницы:   1 2

Lamer6666 ©   (2009-11-11 22:53:00) 

Добрый вечер уважаемые.
Выполняю запрос методом GET получаю в текстовую переменную S HTML код.
Мне необходимо из всего HTML кода выдернуть табличку

<table class="callstable" cellpadding="2" cellspacing="0"  width=500>
<tr>
<td style="border-bottom: 1px solid black; font-weight: bold;">Date</td><td style="border-bottom: 1px solid black; font-weight: bold;"> </td>
  <td style="border-bottom: 1px solid black; font-weight: bold;">Time</td>
 
     
  <td style="border-bottom: 1px solid black; font-weight: bold;"> </td>
  <td style="text-align: left; border-bottom: 1px solid black; font-weight: bold;">Pole1</td>
  <td style="border-bottom: 1px solid black; font-weight: bold;"> </td>

  <td style="text-align: left; border-bottom: 1px solid black; font-weight: bold;">Pole2</td>
  <td style="border-bottom: 1px solid black; font-weight: bold;"> </td>
  <td style="text-align: left; border-bottom: 1px solid black; font-weight: bold;">Pole3</td>
  <td style="border-bottom: 1px solid black; font-weight: bold;"> </td>
 </tr>

Далее пошли строки <tr></tr> с данными.... для выше приведенных заголовков

</table>

и подкорректировать в ней данные....
Кто сталкивался? Как реализовать?
Спасибо и премного благодарен.


Медвежонок Пятачок   (2009-11-14 02:21:00) [21]

ну так найди все вхождения подстрок - сумм.
затем обработай.


Lamer6666   (2009-11-14 02:00:00) [22]

S содержит результат GET запроса.
В S надо произвести арифметические операции над каждым числом вида [0-9]{1,}[.][0-9]{2}.
Вот мне и надо не просто РЕПЛЕЙСИТЬ все такие значения, а РЕПЛЕЙСИТЬ из умноженными на 0,5 например. Как мне сослаться на каждую сумму типа  [0-9]{1,}[.][0-9]{2} для перевода ее в double?


Медвежонок Пятачок   (2009-11-14 01:56:00) [23]

Ну странный ты однако.
Ты что вообще реплейсишь?
По моему это переменная S.

Ты спрашиваешь как сослаться на переменную?


Lamer6666   (2009-11-14 01:45:00) [24]


> а что, проблема умножить найденную сумму (переведя ее сначала
> к double) на два и привести резалт обратно к строке для
> использования в реплейсе?
>

Это ясно, что переводить то? Как сослаться на эту сумму в коде:
r:=TRegExpr.Create;
try
  r.Expression := ' [0-9]{1,}[.][0-9]{2}';
  S:=r.Replace(S,'66.666',false);
finally
  r.free;
end;
?


Медвежонок Пятачок   (2009-11-14 01:03:00) [25]

а что, проблема умножить найденную сумму (переведя ее сначала к double) на два и привести резалт обратно к строке для использования в реплейсе?


Lamer6666   (2009-11-13 21:41:00) [26]

Реализовал:
r:=TRegExpr.Create;
 try
   r.Expression := ' [0-9]{1,}[.][0-9]{2}';
   S:=r.Replace(S,'66.666',false);
 finally
   r.free;
 end;

Но не понимаю как реализовать замену всех искомых сумм не на фиксированное значение '66.666', а на произведение например, то есть в место 0.001 получить везде 0.001*2?


Медвежонок Пятачок   (2009-11-13 15:17:00) [27]

либо вообще ничего не поменяет
ибо внутри мача вполне может не оказаться ничего, что бъет с выражением по которому найден сам этот мач.


Медвежонок Пятачок   (2009-11-13 15:14:00) [28]

либо он весь мач поменяет разом.
кроме того реплейс - это функция


Separator   (2009-11-13 15:14:00) [29]

Использовать отдельно, без Exec


Медвежонок Пятачок   (2009-11-13 15:13:00) [30]

Экспрешшен то перед реплэйсом поменять надо.


Lamer6666   (2009-11-13 09:03:00) [31]


> Там же есть функция Replace

Что то не могу понять как работает, Replace надо использовать отдельно от r.Exec? Или можно в цикле:
   REPEAT
    r.Match [0]
    r.Replace(r.Match [0],'то на что меняем')
   UNTIL not r.ExecNext;


??


Separator   (2009-11-13 05:42:00) [32]

Там же есть функция Replace


Lamer6666   (2009-11-13 00:54:00) [33]

А вот этот вопрос не получилось решить....
Как в
    REPEAT
     r.Match [0]
    UNTIL not r.ExecNext;

заменить найденную строку r.Match [0] на свой текст, может средствами TRegExpr это можно сделать?


Lamer6666   (2009-11-13 00:28:00) [34]

Прошу прощения за лишнее беспокойство, наткнулся:

     REPEAT
      r.Match [0]
     UNTIL not r.ExecNext;


Lamer6666   (2009-11-13 00:08:00) [35]


> Separator

Да действительно удобно, единственное не могу понять как к коде:
   r := TRegExpr.Create;
   try
   r.Expression := 'ТУТ ВЫРОЖЕНИЕ';
   if r.Exec (S) then S:=r.Match [0];
   finally r.Free;
   end;

перебрать все содержащиеся в тексте подстроки удовлетворяющие r.Expression, у меня r.Match [0]; содержит первое найденное?
r.Match [1] ничего не содержит.... ((


Dennis I. Komarov   (2009-11-12 15:45:00) [36]


> и подкорректировать в ней данные....

с какой целью?
я к тому, что на сервере ничего не измениться...


Separator   (2009-11-12 12:53:00) [37]

Советую использовать регулярные выражения, работают достаточно быстро. Очень сильно облегчают такие задачи.
Качать с сайта http://www.regexpstudio.com/, но что-то он не работает, так что выкладываю у себя
http://sergey.vilgelm.info/projects/delphi/regexp


DVM   (2009-11-12 00:28:00) [38]


> Мне необходимо из всего HTML кода выдернуть табличку

Pos() + Copy() - выдернуть можно все что угодно.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо