Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.09.2013, 07:52
LACOSTE LACOSTE вне форума
Прохожий
 
Регистрация: 18.09.2013
Сообщения: 7
Версия Delphi: Rad Studio XE5
Репутация: 10
По умолчанию Парсер сайта для Android (Rad Studio XE5)

Доброго времени суток Уважаемые форумчане!

Кратко поясню ситуацию данной темы.
Есть сайт расписания учебного заведения, возникла необходимость написать мини приложение для андроид смартфонов которое бы это расписание загружало и отображало как в онлайн так и в оффлайн режиме.
Данное приложение уже написано и работает.
НО! Некоторые операции которые приложение выполняет обрабатываются ~20 сек. (в зависимости от скорости интернета и т.п.), при этом в приложении (как и в случаи с VLC) виснет интерфейс на время выполнения операции. А хотелось бы показывать прогресс выполнения операции, хотя бы частями.

Ниже привожу код выполнения операции получения списка групп/преподавателей.

Сильно не ругайте, если считаете код плохим. сам только студент, опыт работы в Delphi 1.5 года.

Похоже что необходимо делать потоки данных, либо грамотно пользоваться оператором sleep(); К сожалению практики в этом нету.

Жду от Ваших ответов - советов, может ссылок полезных. Если у кого то найдется время/желание помочь изменить код на примере одной данной операции, буду очень признателен!!)))

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
unit Unit1;
 
interface
 
uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP,
  FMX.StdCtrls, FMX.Layouts, FMX.Memo, FMX.ListBox;
 
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    IdHTTP1: TIdHTTP;
    Button2: TButton;
    Memo2: TMemo;
    Button3: TButton;
    ComboBox1: TComboBox;
    ComboBox2: TComboBox;
    Memo3: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
 
 
 
 
  public
  function Pars(T_, ForS, _T:string):string;
 
  end;
 
var 
  Form1: TForm1;
  html,group,teach:string;                           // глобальные переменные
 
implementation
 
{$R *.fmx}
 
 
function TForm1.Pars(T_, ForS, _T: string): string; // функция для парсинга
var a, b:integer;
begin
Result := '';
if (T_='') or (ForS='') or (_T='') then Exit;
a:=Pos(T_, ForS);
if a=0 then Exit else a:=a+Length(T_);
ForS:=Copy(ForS, a, Length(ForS)-a+1);
b:=Pos(_T, ForS);
if b>0 then
Result:=Copy(ForS, 1, b - 1);
end;
 
 
 
procedure Button1Click(Sender: TObject);
var
i:integer;
s,s1:string;
begin
 
html:=IdHTTP1.Get('http://m.inhk.ru/');             // код странички
 
// 1 часть обработки кода
 
 
 
// находим в коде часть со списком групп и их id
 
memo1.text:=pars('<option selected disabled>Выбор группы</option>', html, '</select>');
Memo1.Lines.Delete(0);
i:=Memo1.lines.Count;
Memo1.Lines.Delete(i-1);
 
// удаляем пустые строчки
 
for i:=0 to memo1.lines.count-1 div 2 do begin
if i<Memo1.Lines.count then begin
memo1.lines.delete(i);
end;
end;
 
// получаем названия групп и id без лишних тегов
 
for i:=0 to memo1.lines.count-1 do begin
s:=memo1.Lines[i];
s1:=Memo1.Lines[i];
s:=pars('>', s, '<');
s1:=pars('"', s1, '"');
memo2.Lines.Add(s);
memo3.Lines.Add(s1);
end;
 
// временно заносим id групп
 
group:=memo3.Text;
 
// заносим названия групп в combobox
 
for I := 0 to memo1.lines.count-1 do  begin        
ComboBox1.Items.add(Memo2.Lines.Strings[i]);
end;
 
memo1.Lines.Clear;
memo2.Lines.Clear;
memo3.Lines.Clear;
 
// часть 2 аналогична 1й, только для преподавателей
 
 
memo1.text:=pars('<option selected disabled>Выбор преподавателя</option>', html, '</select>');
Memo1.Lines.Delete(0);
i:=Memo1.lines.Count;
Memo1.Lines.Delete(i-1);
 
for i:=0 to memo1.lines.count-1 div 2 do begin
if i<Memo1.Lines.count then begin
memo1.lines.delete(i);
end;
end;
 
for i:=0 to memo1.lines.count-1 do begin
s:=memo1.Lines[i];
s1:=Memo1.Lines[i];
s:=pars('>', s, '<');
s1:=pars('"', s1, '"');
memo2.Lines.Add(s);
memo3.Lines.Add(s1);
end;
 
teach:=memo3.text;
 
for I := 0 to memo1.lines.count-1 do  begin
ComboBox2.Items.add(Memo2.Lines.Strings[i]);
end;
 
memo1.Lines.Clear;
memo2.Lines.Clear;
memo3.Lines.Clear;
 
 
 
// заносим id групп и преподавателей
 
 
Memo1.Text:=group;
Memo2.Text:=teach;
 
end;
Внешний вид формы (тестовый)

Последний раз редактировалось LACOSTE, 18.09.2013 в 07:55.
Ответить с цитированием
 


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:49.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025