Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Помогите с парсингом. Никак не соображу.


Автор: mr_smit 1.9.2008, 20:51
Из каждой пары <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>

Автор: sai_NT 1.9.2008, 22:48
Код

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>
// ну а дальше цикликом как сам описал

Автор: mr_smit 6.9.2008, 19:09
Спасибо. Всё, разобрался.

Код

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;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)