Форум по 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(); К сожалению практики в этом нету.

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

Код:
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, время: 21:00.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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