Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с парсингом. Никак не соображу. Как вытащить эти значение. 
V
    Опции темы
mr_smit
  Дата 1.9.2008, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 27.2.2008
Где: Самара

Репутация: 3
Всего: 4



Из каждой пары <tr></tr> надо вытащить 2-ое и 6-ое значение из <td></td>. Причём первую пару <tr></tr> надо пропустить. Сижу туплю. Не соображу как цикл организовать.

Код

start_block:=Pos('<table class="table1">',LowerCase(s));

for i=0 to 56 do begin
start:=PosEx('<td>',...);
// именно 2-ое и 6-ое
endd:=PosEx('</td>',...);
param:=Copy(s,start+4,endd-start-4);
end;



Код

<table class="table1">
                <thead>
                <tr>
                    <td>Период</td>
                    <td>Всего</td>
                    <td>RU</td>
                    <td><a href="http://site.com/start.html">DE</a></td>
                    <td><a href="http://site.com/start.html">UA KZ</a></td>
                    <td>Uniq</td>
                    <td>Refs</td>
                    <td><a href="http://site.com/start.html">Приз</a></td>
                </tr>
                </thead>
                <tbody>
                        <tr>
                        <td><a href="http://site.com/start.html">Сегодня</a>:</td>
                        <td>$0.72</td>           <--!это значение-->
                        <td>$0.74</td>
                        <td>-</td>
                        <td>-</td>
                        <td>95</td>            <--!это значение-->
                        <td>0.00</td>
                        <td>N/A</td>

                    </tr>
                    <tr>
                        <td><a href="http://site.com/start.html">Вчера</a>:</td>
                        <td>$0.18</td>      <--!это значение-->
                        <td>$0.20</td>
                        <td>-</td>
                        <td>-</td>
                        <td>35</td>           <--!это значение-->
                        <td>0.00</td>
                        <td>N/A</td>
                    </tr>
                    <tr>
                        <td><a href="http://site.com/start.html">Последние 7 дней</a>:</td>
                        <td>$2.01</td>       <--!это значение-->
                        <td>$1.98</td>
                        <td>-</td>
                        <td>-</td>
                        <td>351</td>     <--!это значение-->
                        <td>0.01</td>
                        <td>N/A</td>
                    </tr>
                    <tr>
                        <td><a href="http://site.com/start.html">Текущий месяц</a>:</td>
                        <td>$0.72</td> <--!это значение-->
                        <td>$0.78</td>
                        <td>-</td>
                        <td>-</td>
                        <td>95</td>  <--!это значение-->
                        <td>0.00</td>
                        <td>N/A</td>
                    </tr>
                    <tr>
                        <td><a href="http://site.com/start.html">Прошлый месяц</a>:</td>
                        <td>$7.73</td> <--!это значение-->
                        <td>$7.58</td>
                        <td>-</td>
                        <td>-</td>
                        <td>1540</td>      <--!это значение-->
                        <td>0.03</td>
                        <td>N/A</td>
                    </tr>
                    <tr>
                        <td><a href="http://site.com/start.html">За всё время</a>:</td>
                        <td>$49.21</td>  <--!это значение-->
                        <td>$48.13</td>
                        <td>-</td>
                        <td>-</td>
                        <td>9699</td>     <--!это значение-->
                        <td>0.47</td>
                        <td>N/A</td>
                    </tr>
                                                                                </tbody>
            </table>


Это сообщение отредактировал(а) mr_smit - 1.9.2008, 20:52
PM MAIL   Вверх
sai_NT
Дата 1.9.2008, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 8.8.2007

Репутация: 2
Всего: 3



Код

content:=LowerCase(s);
start_block:=Pos('<table class="table1">',content);
if start_block = 0 then
  exit;
start_block:=PosEx('</tr>',content,start_block);
if start_block = 0 then
  exit;
inc(start_block, 5);
// В переменной start_block хранится значение позиции сразу за первым <tr>...</tr>
// ну а дальше цикликом как сам описал

PM MAIL   Вверх
mr_smit
Дата 6.9.2008, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 27.2.2008
Где: Самара

Репутация: 3
Всего: 4



Спасибо. Всё, разобрался.

Код

t:=0;
  BlockStart:=Pos('class="table1"',LowerCase(s));
  if BlockStart > 0 then
  begin
    BlockEnd:=PosEx('</tr>',LowerCase(s),BlockStart);

    for i:=0 to 40 do begin
    inc(t);
    BlockStart:=PosEx('<td>',LowerCase(s),BlockEnd);
    BlockEnd:=PosEx('</td>',LowerCase(s),BlockStart);

    if t=2 then
     begin
     today:=copy(s,BlockStart+length('<td>'),BlockEnd-BlockStart-length('<td>'));
     end;
    if t=6 then
     begin
     uniq:=copy(s,BlockStart+length('<td>'),BlockEnd-BlockStart-length('<td>'));
     label3.Caption:=today+' (uniq: '+uniq+')';
     end;
///////////////////////////////////////////////////////////////////////////////
    if t=10 then
     begin
     today:=copy(s,BlockStart+length('<td>'),BlockEnd-BlockStart-length('<td>'));
     end;
    if t=14 then
     begin
     uniq:=copy(s,BlockStart+length('<td>'),BlockEnd-BlockStart-length('<td>'));
     label6.Caption:=today+' (uniq: '+uniq+')';
     end;
///////////////////////////////////////////////////////////////////////////////
    if t=26 then
     begin
     today:=copy(s,BlockStart+length('<td>'),BlockEnd-BlockStart-length('<td>'));
     end;
    if t=30 then
     begin
     uniq:=copy(s,BlockStart+length('<td>'),BlockEnd-BlockStart-length('<td>'));
     label9.Caption:=today+' (uniq: '+uniq+')';
     end;
///////////////////////////////////////////////////////////////////////////////
    if t=34 then
     begin
     today:=copy(s,BlockStart+length('<td>'),BlockEnd-BlockStart-length('<td>'));
     end;
    if t=38 then
     begin
     uniq:=copy(s,BlockStart+length('<td>'),BlockEnd-BlockStart-length('<td>'));
     label10.Caption:=today+' (uniq: '+uniq+')';
     end;
///////////////////////////////////////////////////////////////////////////////
    end;

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0461 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.