Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.26;
Скачать: CL | DM;

Вниз

Как прописать процедуру, где?   Найти похожие ветки 

 
Nox321   (2006-03-07 18:16) [0]

Как прописать процедуру, где?
Пишу программу для закачки и анализа html страниц(типа: поисковик текста на станица). Использую для каждой закачки отдельные процессы. Мне нужна процедура, которая бы обрабатывала скачанную страницу, а затем удаляла ее. Как ее прописать в коде, где(type, public, и дальше)?
Описание процедуры:
procedure Analis(var url,catalog:string; i:integer);
url - url скачанной странички (нужен только для записи в файл)
catalog - место ее нахождения
i - названия отличаются только по конечной цифре(body1.html  ;  body2.html  ; ...  ;  body45.html )  

В самой процедуре будет производиться поиск куска текста и дальнейшая его запись в формате *.txt
Пример содержимого файла *txt :
www.test1.ru Привет Вася
www.tet1.forum.ru как дела Галя?
...

сам код программы:


unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, Psock, NMHttp, StdCtrls;

type
 THTTPThread = class(TThread)
 private
    {Для каждого процесса - создаем свой компонент TNMHTTP}
   FHTTP: TNMHTTP;

 protected
// Execute вызывается при запуске процесса; override - заменяем
// существующую процедуру базового класса TThread
   procedure Execute; override;
// DoWork - созданная нами функция, выполнение которой синхронизируется в Execute
   procedure DoWork;

  // procedure Search(var www,cat:string; i:integer);
 public
// URL - созданная нами строка, указывающая процессу, какой URL ему нужно скачать
   URL: string;

 end;

type
 TForm1 = class(TForm)
   Edit1: TEdit;
   Button1: TButton;
   Label1: TLabel;
   ListBox1: TListBox;
   Button2: TButton;
   Button3: TButton;
   Label2: TLabel;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   procedure Button3Click(Sender: TObject);
   public
 //   Суда ее ставить?

   end;

var
 Form1: TForm1;
 input,output:text;

implementation

{$R *.dfm}

//procedure Analis(var url,catalog:string; i:integer);
//begin
      //пока еще не написал что тут будет делаться
//end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 {Удаление выделенного URL из списка}
 if ListBox1.ItemIndex >= 0 then
   ListBox1.Items.Delete(ListBox1.ItemIndex);
end;

procedure TForm1.Button2Click(Sender: TObject);
 var s: string;
begin
 {Добавление URL в список}
 s := InputBox("Добавить","Введите URL:","");
 if s <> "" then
   ListBox1.Items.Add(s);
end;

procedure TForm1.Button1Click(Sender: TObject);
 var i: Integer;
begin
 if Length(Edit1.Text) > 0 then
   if not DirectoryExists(Edit1.Text) then
     MkDir(Edit1.Text);

 for i := 0 to ListBox1.Items.Count-1 do begin
   with THTTPThread.Create(True) do begin

     URL := ListBox1.Items[i];
     Resume;
   end;
 end;
end;

procedure THTTPThread.Execute;
begin

 Synchronize(DoWork);
end;

procedure THTTPThread.DoWork;
 var i: Integer;
begin

 FHTTP := TNMHTTP.Create(Form1);

 FHTTP.InputFileMode := True;

 i := 1;
 while FileExists(Form1.Edit1.Text+"\body"+IntToStr(i)+".html") do
   Inc(i);

 FHTTP.Body := Form1.Edit1.Text+"\body"+IntToStr(i)+".html";
 FHTTP.Header := Form1.Edit1.Text+"\header"+IntToStr(i)+".txt";

 FHTTP.Get(URL);

 //!!!!!!!!!!здесь ее нужно вызвать!!!!!!!!!!!!!!!!!
 FHTTP.Free;
end;

end.


 
API ©   (2006-03-07 18:31) [1]

//   Суда ее ставить?

Зачем?

//!!!!!!!!!!здесь ее нужно вызвать!!!!!!!!!!!!!!!!!

Ну так и вызывайте: Analis(<параметры>)


 
YurikGL ©   (2006-03-07 19:18) [2]

Если ты ее хочешь вставить сюда то объявлять ее надо будет

procedure TForm1.Analis(var url,catalog:string; i:integer);
Begin
...
End


 
Nox321   (2006-03-07 19:48) [3]

Спасибо. еще вопрос.
Как мне сначало скачать 5 стрниц одновременно, потом еще 5 и до тех пор пока список страниц не кончиться, я пытался сделать так
изменил кнопку button1, но все равно ничего не работает...:( он скачивает каждый раз разное число url в чем прикол?

procedure TForm1.Button1Click(Sender: TObject);
 var i,n,k,z: Integer;
       s:string;
begin
//очищаем listbox
 for z:=0 to ListBox1.Count do
                       Listbox1.Items.Delete(0);

//создаем каталог
 if Length(Edit1.Text) > 0 then
   if not DirectoryExists(Edit1.Text) then
     MkDir(Edit1.Text);

//открываем список url и скачиваем по 5 штук

 AssignFile(input, edit2.Text);
 reset(input);
 n:=0;
 k:=0;
 repeat
       n:=n+1;
       k:=k+1;
       readln(input,s);
       ListBox1.Items.Add(s);
    {   if (k=5) or (eof(input)) then
       begin
               for i := 0 to ListBox1.Count-1 do begin
                       with THTTPThread.Create(True) do begin //что вот тут делает прога? код не мой, но я так понял - идет создание для каждого URL в списке своего процесса. А как мне по 5 скачивать?  
                             URL := ListBox1.Items[i];
                             Resume;
                       end;
               end;

               k:=0;
               for z:=0 to ListBox1.Count do
                       Listbox1.Items.Delete(0);
               end;}
 until (eof(input));

  CloseFile(input);



Страницы: 1 вся ветка

Текущий архив: 2006.03.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.038 c
4-1136275749
Arazel
2006-01-03 11:09
2006.03.26
Как присвойть лог. диску другую букву?


3-1138803561
Инъектор
2006-02-01 17:19
2006.03.26
Проблема в открытии dbf файла после выгрузки


2-1142324933
dabreezy
2006-03-14 11:28
2006.03.26
Опять вопрос по потокам


2-1141825580
r@dius
2006-03-08 16:46
2006.03.26
Выбор обработчика событий


9-1124121668
ArtemESC
2005-08-15 20:01
2006.03.26
DelphiX