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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.08.2009, 22:56   #1
Lemo
Форумчанин
 
Аватар для Lemo
 
Регистрация: 13.10.2008
Сообщений: 714
Радость Парсинг нужной информации

Суть такова: Есть сайт(букмекерская контора), который предлогает коэффициенту на игры спортивыных команд....
Вопрос:
Как можно запарсить название команды, и такие данные как Поб1,Ничия, Поб2?!
На 2.png показано что бы как выводилося на форму проекта... Стрелкой показано как едиты вниз распологаються, или вывод ща не совсем важен...
Мои размышления:
Взять сначало "исходный код этой страници" (1.txt) и там как то начать парсить...
Жду предложений!..
Изображения
Тип файла: jpg 1.jpg (23.3 Кб, 159 просмотров)
Тип файла: jpg 2.jpg (54.9 Кб, 149 просмотров)
Вложения
Тип файла: txt 1.txt (5.9 Кб, 23 просмотров)
Lemo вне форума Ответить с цитированием
Старый 16.08.2009, 00:27   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Правильные размышления.. Парсить.

Не очень понятно, правда, какое название брать (там ведь их по 2 на строку). Допустим, первое.

Вначале ищем строку
Код:
<hr color=#CC0033 noshade>
и отметаем все, что до нее, включительно.

Далее цикл.

Ищем первое
Код:
<b id=r>
и берем строку от '>' до </b> - это название.
Далее ищем <b> и берем число до </b> - это Поб1
Потом берем два числа до следующего <b> - это ничья и поб2.
Далее ищем
Код:
<b id=r>
и пропускаем его (это название второй команды на строку).

И пошла следующая итерация.

Как-то так.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 16.08.2009, 16:53   #3
Lemo
Форумчанин
 
Аватар для Lemo
 
Регистрация: 13.10.2008
Сообщений: 714
Радость

а нельзя 2 раза Pos использовать в Copy ?
Пример
Код:
e:=copy(st,pos('T',st),pos('P',st));
Тойсть выбрать
1111opoppopopoTdsadsadsP32dsds
тойсть итог: TdsadsadsP
Lemo вне форума Ответить с цитированием
Старый 16.08.2009, 17:04   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

конечно можно.

только немного подругому надо тогда
e:=copy(st,pos('T',st),pos('T',st)-pos('P',st));
в последнем аргументе возможно нужно +/-1 делать(не припомню чет..посмотри сам)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 16.08.2009 в 17:58.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.08.2009, 20:58   #5
Lemo
Форумчанин
 
Аватар для Lemo
 
Регистрация: 13.10.2008
Сообщений: 714
Радость

Вообщем на денный момент напарсил: всю инфу по матчю, 1 команду, 2 команду...
Вопрос:
Как вывести во второе мемо рузьтат парсинга (на данный момент переменных inf, kom1,kom2) всех матчей, которые закинуты в мемо1?
Мои размышления натавкивают 100% цикл, но хз как, не построчнно же как то =((((
Тойсть в мемо1 находиться текст
Код:
 16/08  <b id=r>1)Судува</b>         <b> 1.20 </b>   5.20  10.50  <b>1.01 </b> 1.12  4.00  <b>-2.0=>1.85 </b> +2.0=>1.85  <b>  3.5 </b> 1.75  1.95
 19:00  <b id=r>2)Круоя</b>
   <b>Победа с учетом форы: </b><b></b>Судува(-1.5) - 1.45, <b></b>Круоя(+2.5) - 1.45

 16/08  <b id=r>1)Таурас</b>         <b> 6.00 </b>   3.80   1.45  <b>2.50 </b> 1.22  1.08  <b>+1.0=>2.10 </b> -1.5=>2.10  <b>  2.5 </b> 1.95  1.75
 19:00  <b id=r>2)Экранас</b>
   <b>Победа с учетом форы: </b><b></b>Таурас(+1.5) - 1.65, <b></b>Экранас(-1) - 1.65

 16/08  <b id=r>1)Шяуляй</b>         <b> 5.20 </b>   3.50   1.55  <b>2.30 </b> 1.25  1.12  <b>+1.0=>1.75 </b> -1.0=>1.95  <b>  2.5 </b> 2.05  1.70
 19:00  <b id=r>2)Ветра</b>
   <b>Победа с учетом форы: </b><b></b>Шяуляй(+1.5) - 1.45
А в мемо 2 должно появиться
Код:
16/08  <b id=r>1)Судува</b>         <b> 1.20 </b>   5.20  10.50  <b>1.01 </b> 1.12  4.00  <b>-2.0=>1.85 </b> +2.0=>1.85  <b>  3.5 </b> 1.75  
1.95
 19:00  <b id=r>2)Круоя

Команды: Судува - Круоя


16/08  <b id=r>1)Таурас</b>         <b> 6.00 </b>   3.80   1.45  <b>2.50 </b> 1.22  1.08  <b>+1.0=>2.10 </b> -1.5=>2.10  <b>  2.5 </b> 1.95  
1.75
 19:00  <b id=r>2)Экран

Команды: Таурас - Экран


16/08  <b id=r>1)Шяуляй</b>         <b> 5.20 </b>   3.50   1.55  <b>2.30 </b> 1.25  1.12  <b>+1.0=>1.75 </b> -1.0=>1.95  <b>  2.5 </b> 2.05  
1.70
 19:00  <b id=r>2)Ветра

Команды: Шяуляй - Ветра

А у меня в мемо2 только
Код:
16/08  <b id=r>1)Судува</b>         <b> 1.20 </b>   5.20  10.50  <b>1.01 </b> 1.12  4.00  <b>-2.0=>1.85 </b> +2.0=>1.85  <b>  3.5 </b> 1.75  
1.95
 19:00  <b id=r>2)Круоя

Команды: Судува - Круоя
В цикле можно было бы пройти, но как? если тут не совсем по строкам.... Жду советов
Вложения
Тип файла: rar 1.rar (399.8 Кб, 8 просмотров)

Последний раз редактировалось Stilet; 17.08.2009 в 08:17.
Lemo вне форума Ответить с цитированием
Старый 16.08.2009, 23:47   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Подключите модуль StrUtils (для функции posEx). Вот код обработчика кнопки:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
kom1,kom2 : string;
k,a,b,e : integer;
TEXT : string;
begin

TEXT := Memo1.Lines.Text;

k := 1;
while true do
 begin
 e := posEx('<b>Победа с учетом форы',TEXT,k);
 if e=0 then break;
 Memo2.Lines.Text := Memo2.Lines.Text + copy(TEXT,k,e-k);
 a := posEx('<b id=r>',TEXT,k);
 b := posEx('</b>',TEXT,a);
 kom1 := copy(TEXT,a+10,b-a-10);
 k := b;
 a := posEx('<b id=r>',TEXT,k);
 b := posEx('</b>',TEXT,a);
 kom2 := copy(TEXT,a+10,b-a-10);
 k := posEx(#13,TEXT,e);
 Memo2.Lines.Text := Memo2.Lines.Text + #13+'Команды: '+kom1+' - '+kom2+#13;
 if k=0 then break;
 end;

end;
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 17.08.2009, 14:02   #7
Lemo
Форумчанин
 
Аватар для Lemo
 
Регистрация: 13.10.2008
Сообщений: 714
Радость

2 Sazary Спасибо за сотрудничество!
Но решил все таки сам попарсить, в итоге вышла такая проблемка при выводе в stringgrid
1) Повторяються команды с коеффициентами.
Как мне лучше пройти по циклу, если повторяеться, то удалить строку(что бы осталося 1 строка с этими командами)
2) некоректно отображаеться инфа в стрингГриде(если оно некоектно отображаеться удалить ввобще строку)
Изображения
Тип файла: jpg Безымянный.jpg (31.2 Кб, 143 просмотров)

Последний раз редактировалось Lemo; 17.08.2009 в 14:25.
Lemo вне форума Ответить с цитированием
Старый 17.08.2009, 14:34   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Lemo, покажите код обработчика кнопки. А заодно содержимое Мемо.
А то так как-то сложно выявить ошибки )
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 17.08.2009, 15:09   #9
Lemo
Форумчанин
 
Аватар для Lemo
 
Регистрация: 13.10.2008
Сообщений: 714
По умолчанию

Код всего проекта
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, sButton, sMemo, sEdit, Grids;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    StringGrid1: TStringGrid;
    procedure Button1Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
   
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

st,inf,pars_inf,kom1,pars_kom1,kom2,pars_kom2,data,times,win1,win2,nich:string;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
st:=memo1.Lines.text;
    for i:=1 to memo1.Lines.Count-1 do   begin
    pars_inf:=copy(st,pos('1)',st)-15,length(st));
inf:=copy(pars_inf,1,pos('2)',pars_inf)+6);   // вся инфа

    pars_kom1:=copy(inf,pos('1)',inf)+2,length(inf));
kom1:=copy(pars_kom1,1,pos('</b>',inf)-18);  // Название первой команды
    pars_kom2:=copy(inf,pos('2)',inf)+2,length(inf));  // Название второй команды
kom2:=copy(pars_kom2,1,pos('</b>',pars_kom2)+40);

times:=copy(inf,pos('2)',inf)-15,5);
data:=copy(inf,1,5);
win1:=copy(inf,pos('<b>',inf)+4,4);
nich:=copy(inf,pos('<b>',inf)+16,4);
win2:=copy(inf,pos('<b>',inf)+22,5);


    {
memo2.Lines.add(inf);
memo2.Lines.add('');
memo2.Lines.Add('Команды: ' + kom1+' - '+kom2);
memo2.Lines.add('Время: '+ times);
memo2.Lines.add('Дата: '+ data);
memo2.Lines.add('Коф Поб1: '+ win1);
memo2.Lines.add('Коф Ничия: '+ nich);
memo2.Lines.add('Коф Поб2: '+ win2);
memo2.Lines.add('==============================================');
                                                          }
delete(st,1,length(inf)+98);
memo1.Lines.Text:=st;

StringGrid1.Cells[1,i]:=kom1+ ' - '+kom2;
StringGrid1.Cells[2,i]:=win1;
StringGrid1.Cells[3,i]:=nich;
StringGrid1.Cells[4,i]:=win2;
end;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
StringGrid1.ColWidths[1]:=90;
StringGrid1.ColWidths[2]:=40;
StringGrid1.ColWidths[3]:=40;
StringGrid1.ColWidths[4]:=40;
end;

end.
Содержимое мемо
Код:
<pre></pre><br><a name=672164><div class=cap>Футбол. Чемпионат Гeрмании.*2-я бундеслига</div></a><br><pre><hr color=#CC0033 noshade> Дата   Событие        <b>Поб.1 </b> НичьяX  Поб.2  <b> 1X  </b>  12    X2   <b>фора1=>кф1 </b> фора2=>кф2  <b>тотал </b> мен.  бол.
<hr color=#CC0033 noshade> 17/08  <b id=r>1)Аахен</b>        <b> 1.75 </b>   3.50   4.30  <b>1.20 </b> 1.25  1.95  <b>-1.5=>3.00 </b> +1.0=>1.58  <b>  2.5 </b> 2.15  1.62
 22:15  <b id=r>2)Санкт-Паули</b>
   <b>Победа с учетом форы: </b><b></b>Аахен(-1) - 2.25, <b></b>Санкт-Паули(+1.5) - 1.33
   <b>Голы: </b>Аахен: забьет - 1.12, не забьет - 5.2; Санкт-Паули: забьет - 1.4, не забьет - 2.7
         Аахен(1.5): мен. - 1.95, бол. - 1.75; Санкт-Паули(1.5): мен. - 1.38, бол. - 2.8
   <b>Первый гол: </b>Аахен - 1.6, Санкт-Паули - 2.5, никто не забьет - 9.5; c 1 по 28 мин.  - 1.8, 
         c 29 по 90 мин.  - 2.25
   <b>Тотал матча: </b>чет. - 1.9, нечет. - 1.9
   <b>Обе команды забьют: </b>да - 1.55, нет - 2.3
   <b>Результативность таймов: </b>1-й больше 2-го - 3.2, <b></b>1-й равен 2-му - 3.4, <b></b>1-й меньше 2-го - 1.95
   <b>Исходы по таймам:</b>
                     Поб.1  Ничья  Поб.2  фора1=>кф1  фора2=>кф2  тотал  мен.   бол.   тотал  мен.   бол.
           1-й тайм  2.25   2.15   4.50   0.0=>1.50   0.0=>2.40    <b>1.5</b>   1.55   2.30    <b>0.5</b>   3.20   1.30
           2-й тайм  2.05   2.50   4.10   0.0=>1.50   0.0=>2.40    <b>1.5</b>   1.95   1.75    <b>0.5</b>   4.00   1.22
<hr color=#CC0033 noshade></pre><br><a name=672165><div class=cap>Футбол. Чемпионат Дании</div></a><br><pre><hr color=#CC0033 noshade> Дата   Событие      <b>Поб.1 </b> НичьяX  Поб.2  <b> 1X  </b>  12    X2   <b>фора1=>кф1 </b> фора2=>кф2  <b>тотал </b> мен.  бол.
<hr color=#CC0033 noshade> 17/08  <b id=r>1)Оденсе</b>     <b> 1.65 </b>   3.40   5.20  <b>1.14 </b> 1.28  2.15  <b>-1.5=>2.80 </b> +1.0=>1.75  <b>  2.5 </b> 2.25  1.60
 21:00  <b id=r>2)Мидюлленд</b>
   <b>Победа с учетом форы: </b><b></b>Оденсе(-1) - 2.0, <b></b>Мидюлленд(+1.5) - 1.4
   <b>Голы: </b>Оденсе: забьет - 1.1, не забьет - 5.5; Мидюлленд: забьет - 1.48, не забьет - 2.45
         Оденсе(1.5): мен. - 1.95, бол. - 1.75; Мидюлленд(1.5): мен. - 1.35, бол. - 2.9
   <b>Первый гол: </b>Оденсе - 1.55, Мидюлленд - 2.75, никто не забьет - 10.0; c 1 по 27 мин.  - 1.95, 
         c 28 по 90 мин.  - 2.0
   <b>Тотал матча: </b>чет. - 1.9, нечет. - 1.9
   <b>Обе команды забьют: </b>да - 1.65, нет - 2.1
   <b>Удаление игрока с поля: </b>да - 4.5, <b></b>нет - 1.15
   <b>Результативность таймов: </b>1-й больше 2-го - 3.1, <b></b>1-й равен 2-му - 2.9, <b></b>1-й меньше 2-го - 2.2

Последний раз редактировалось Lemo; 17.08.2009 в 15:11.
Lemo вне форума Ответить с цитированием
Старый 17.08.2009, 15:39   #10
Lemo
Форумчанин
 
Аватар для Lemo
 
Регистрация: 13.10.2008
Сообщений: 714
Радость

Как мне запарсить правильно
что бы в мемо 1 было
Код:
<pre></pre><br><a name=672164><div class=cap>Футбол. Чемпионат Гeрмании.*2-я бундеслига</div></a><br><pre><hr color=#CC0033 noshade> Дата   Событие        <b>Поб.1 </b> НичьяX  Поб.2  <b> 1X  </b>  12    X2   <b>фора1=>кф1 </b> фора2=>кф2  <b>тотал </b> мен.  бол.
<hr color=#CC0033 noshade> 17/08  <b id=r>1)Аахен</b>        <b> 1.75 </b>   3.50   4.30  <b>1.20 </b> 1.25  1.95  <b>-1.5=>3.00 </b> +1.0=>1.58  <b>  2.5 </b> 2.15  1.62
 22:15  <b id=r>2)Санкт-Паули</b>
   <b>Победа с учетом форы: </b><b></b>Аахен(-1) - 2.25, <b></b>Санкт-Паули(+1.5) - 1.33
   <b>Голы: </b>Аахен: забьет - 1.12, не забьет - 5.2; Санкт-Паули: забьет - 1.4, не забьет - 2.7
         Аахен(1.5): мен. - 1.95, бол. - 1.75; Санкт-Паули(1.5): мен. - 1.38, бол. - 2.8
   <b>Первый гол: </b>Аахен - 1.6, Санкт-Паули - 2.5, никто не забьет - 9.5; c 1 по 28 мин.  - 1.8, 
         c 29 по 90 мин.  - 2.25
   <b>Тотал матча: </b>чет. - 1.9, нечет. - 1.9
   <b>Обе команды забьют: </b>да - 1.55, нет - 2.3
   <b>Результативность таймов: </b>1-й больше 2-го - 3.2, <b></b>1-й равен 2-му - 3.4, <b></b>1-й меньше 2-го - 1.95
   <b>Исходы по таймам:</b>
                     Поб.1  Ничья  Поб.2  фора1=>кф1  фора2=>кф2  тотал  мен.   бол.   тотал  мен.   бол.
           1-й тайм  2.25   2.15   4.50   0.0=>1.50   0.0=>2.40    <b>1.5</b>   1.55   2.30    <b>0.5</b>   3.20   1.30
           2-й тайм  2.05   2.50   4.10   0.0=>1.50   0.0=>2.40    <b>1.5</b>   1.95   1.75    <b>0.5</b>   4.00   1.22
<hr color=#CC0033 noshade></pre><br><a name=672165><div class=cap>Футбол. Чемпионат Дании</div></a><br><pre><hr color=#CC0033 noshade> Дата   Событие      <b>Поб.1 </b> НичьяX  Поб.2  <b> 1X  </b>  12    X2   <b>фора1=>кф1 </b> фора2=>кф2  <b>тотал </b> мен.  бол.
<hr color=#CC0033 noshade> 17/08  <b id=r>1)Оденсе</b>     <b> 1.65 </b>   3.40   5.20  <b>1.14 </b> 1.28  2.15  <b>-1.5=>2.80 </b> +1.0=>1.75  <b>  2.5 </b> 2.25  1.60
 21:00  <b id=r>2)Мидюлленд</b>
   <b>Победа с учетом форы: </b><b></b>Оденсе(-1) - 2.0, <b></b>Мидюлленд(+1.5) - 1.4
   <b>Голы: </b>Оденсе: забьет - 1.1, не забьет - 5.5; Мидюлленд: забьет - 1.48, не забьет - 2.45
         Оденсе(1.5): мен. - 1.95, бол. - 1.75; Мидюлленд(1.5): мен. - 1.35, бол. - 2.9
   <b>Первый гол: </b>Оденсе - 1.55, Мидюлленд - 2.75, никто не забьет - 10.0; c 1 по 27 мин.  - 1.95, 
         c 28 по 90 мин.  - 2.0
   <b>Тотал матча: </b>чет. - 1.9, нечет. - 1.9
   <b>Обе команды забьют: </b>да - 1.65, нет - 2.1
   <b>Удаление игрока с поля: </b>да - 4.5, <b></b>нет - 1.15
   <b>Результативность таймов: </b>1-й больше 2-го - 3.1, <b></b>1-й равен 2-му - 2.9, <b></b>1-й меньше 2-го - 2.2

А в мемо 2 вышло
Код:
<hr color=#CC0033 noshade> 17/08  <b id=r>1)Аахен</b>        <b> 1.75 </b>   3.50   4.30  <b>1.20 </b> 1.25  1.95  <b>-1.5=>3.00 </b> +1.0=>1.58  <b>  2.5 </b> 2.15  1.62
 22:15  <b id=r>2)Санкт-Паули</b>

<hr color=#CC0033 noshade> 17/08  <b id=r>1)Оденсе</b>     <b> 1.65 </b>   3.40   5.20  <b>1.14 </b> 1.28  2.15  <b>-1.5=>2.80 </b> +1.0=>1.75  <b>  2.5 </b> 2.25  1.60
 21:00  <b id=r>2)Мидюлленд</b>
Lemo вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Клик в нужной части экрана suvor111 JavaScript, Ajax 9 29.04.2009 19:57
ввод информации с клавиутуры в двумерный масив, запись информации с масива в файл x_omega_x Помощь студентам 1 29.12.2008 02:30
Сохранять текст в нужной кодировке snake-as Microsoft Office Excel 5 28.10.2008 06:37
Проверка наличия нужной Флешки ??? Noor Общие вопросы Delphi 7 09.11.2007 17:39