Приветствую Вас Гость | RSS

Delphi заготовки

Пятница, 10.05.2024, 23:27
Главная » 2012 » Май » 2 » Delphi. программа для парсинга сайта superjob.ru Список выходных и рабочих дней в 2012 году
22:17
Delphi. программа для парсинга сайта superjob.ru Список выходных и рабочих дней в 2012 году
Список выходных дней в 2012 году
на странице http://www.superjob.ru/proizvodstvennyj_kalendar/2012/ 
приведен производственный календарь.

задача получить точно такой же календарь  в массиве элементов

определим структуру данных

  TdateM=record
     ddate1:Tdate; // Дата
     FreeDay:boolean; // True - cвободный день False - рабочий день
 end;


var

  DateM:array of TdateM;
  DateMCount:integer;

для работы функции скачивания данных из интернета нам понадобится модуль WinInet
функция получения контента с сайта приведена в статье
http://netsoftware.ucoz.ru/news/skachat_fajl_iz_interneta_v_peremennuju/2012-04-12-31
Function GetCursFile (const fileURL:string): string; я взял ее за основу для получения контента  с сайта superjob.ru


напишем несколько вспомогательных функций

// добавляем дату в массив
Procedure AddDateM(DateValue:Tdate;FreeDay:boolean=false);
begin
    DateMCount:=DateMCount+1;
    setlength(DateM,DateMCount);
    DateM[DateMCount-1].ddate1:=DateValue;
    DateM[DateMCount-1].FreeDay:=FreeDay;
end;

// получение значений
Function GetAllNumber(s:string):string;
  var s2:string;
      x,l:integer;
begin
  s2:='';
  l:=length(S);
  for x:=1 to l do
  if ((s[x]>='0') and (s[x]<='9')) or (s[x] in ['.',',']) then  s2:=s2+s[x];
  result:=s2;
end;

// получить слово без доп знаков
Function GetWordFromStr(s:string):string;
var x,l:integer;
    s2:string;
begin
  s2:='';
  l:=length(s);
  for x:=1 to l do
    if s[x] in ['А'..'Я','а'..'я','A'..'Z','a'..'z',' '] then s2:=s2+s[x];
  result:=s2;
end;


Function GetIndexMonth(s:string):integer; // возвращает индекс месяца
const
  MonthText:array [1..12] of string = ('Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь');
var i:integer;
begin
result:=1;
   for I:=1 to 12 do if s=MonthText[i] then begin result:=i; exit; end;
end;



// Обновить массив для производтсенного календаря

Procedure UpdateDate(Text,years:string);
var
   s:string;
   x:integer;
   html_kalendar_beg:boolean;
   tabl:integer;
   SMonth:string;
   MonthInt:Integer;
   SdayRab:string;
   DayStr:string;
   sDayFree:string;
   TextFromList:TstringList;
begin
TextFromList:=TstringList.create;
TextFromList.text:=Text;
DateMCount:=0;
html_kalendar_beg:=false;
tabl:=0;
SdayRab:='                            <td>';
sDayFree:='                            <td bgcolor="#FFCCCC" class=holiday>';
SMonth:='01';
  for X:=0 to TextFromList.Count-1 do begin
       s:=TextFromList[x];
       if pos('<table class=html_kalendar width="100%" border="0" cellspacing="0" cellpadding="10">',s)>0 then begin
         html_kalendar_beg:=true;
         tabl:=tabl+1;
       end;
       if html_kalendar_beg then begin
         if pos('</table>',s)>0 then begin
            tabl:=tabl-1;
         end else
         if pos('table',s)>0 then begin
            tabl:=tabl+1;
         end;
         if tabl=0 then html_kalendar_beg:=false;
              if (pos('class=head',s)>0) and (pos('&nbsp;',s)=0) then begin
                  SMonth:=form1.Memo1.Lines[x+1];
                  SMonth:=GetWordFromStr(SMonth);
                  MonthInt:=GetIndexMonth(SMonth);
              end;
         if pos(SdayRab,s)>0 then begin
              DayStr:=copy(s,length(SdayRab)+1,pos('</td>',s)-length(SdayRab)-1);
              DayStr:=GetAllNumber(DayStr);
              AddDateM(StrToDate(FormatFloat('00',strtoint(DayStr))+'.'+FormatFloat('00',MonthInt)+'.'+years),false);
         end;
         if pos(sDayFree,s)>0 then begin
              DayStr:=copy(s,length(sDayFree)+1,pos('</td>',s)-length(sDayFree)-1);
              DayStr:=GetAllNumber(DayStr);
              AddDateM(StrToDate(FormatFloat('00',strtoint(DayStr))+'.'+FormatFloat('00',MonthInt)+'.'+years),true);
         end;
      end;
  end;
  TextFromList.free;
end;

// тип для на входе дата на выходе // True - cвободный день False - рабочий день
Function GetDateFree(DateValue:Tdate):boolean;
var x:integer;
begin
result:=false;
  for X:=0 to DateMCount-1 do
   if DateM[x].ddate1=DateValue then begin result:=DateM[x].FreeDay; exit; end;
end;

Цикл от одной даты до другой

var x:integer;
    s:string;
begin
UpdateDate(form1.Memo1.Lines.Text,'2012');
form1.Memo2.Lines.Clear;

  for X:=round(StrtoDate('01.01.2012')) to round(StrtoDate('31.12.2012')) do begin
     if  GetDateFree(x) then
     s:='FreeDay'
     else s:='WorkDay';
     form1.Memo2.Lines.Add(DateTostr(x)+'='+s);
  end;
end;

полученный файл
 
полученный список
/05_parsing_sajta_super_job.zip
взято с сайта http://www.superjob.ru/proizvodstvennyj_kalendar/2012/

01.01.2012=FreeDay
02.01.2012=FreeDay
03.01.2012=FreeDay
04.01.2012=FreeDay
05.01.2012=FreeDay
06.01.2012=FreeDay
07.01.2012=FreeDay
08.01.2012=FreeDay
09.01.2012=FreeDay
10.01.2012=WorkDay
11.01.2012=WorkDay
12.01.2012=WorkDay
13.01.2012=WorkDay
14.01.2012=FreeDay
15.01.2012=FreeDay
16.01.2012=WorkDay
17.01.2012=WorkDay
18.01.2012=WorkDay
19.01.2012=WorkDay
20.01.2012=WorkDay
21.01.2012=FreeDay
22.01.2012=FreeDay
23.01.2012=WorkDay
24.01.2012=WorkDay
25.01.2012=WorkDay
26.01.2012=WorkDay
27.01.2012=WorkDay
28.01.2012=FreeDay
29.01.2012=FreeDay
30.01.2012=WorkDay
31.01.2012=WorkDay
01.02.2012=WorkDay
02.02.2012=WorkDay
03.02.2012=WorkDay
04.02.2012=FreeDay
05.02.2012=FreeDay
06.02.2012=WorkDay
07.02.2012=WorkDay
08.02.2012=WorkDay
09.02.2012=WorkDay
10.02.2012=WorkDay
11.02.2012=FreeDay
12.02.2012=FreeDay
13.02.2012=WorkDay
14.02.2012=WorkDay
15.02.2012=WorkDay
16.02.2012=WorkDay
17.02.2012=WorkDay
18.02.2012=FreeDay
19.02.2012=FreeDay
20.02.2012=WorkDay
21.02.2012=WorkDay
22.02.2012=WorkDay
23.02.2012=FreeDay
24.02.2012=WorkDay
25.02.2012=FreeDay
26.02.2012=FreeDay
27.02.2012=WorkDay
28.02.2012=WorkDay
29.02.2012=WorkDay
01.03.2012=WorkDay
02.03.2012=WorkDay
03.03.2012=FreeDay
04.03.2012=FreeDay
05.03.2012=WorkDay
06.03.2012=WorkDay
07.03.2012=WorkDay
08.03.2012=FreeDay
09.03.2012=FreeDay
10.03.2012=FreeDay
11.03.2012=WorkDay
12.03.2012=WorkDay
13.03.2012=WorkDay
14.03.2012=WorkDay
15.03.2012=WorkDay
16.03.2012=WorkDay
17.03.2012=FreeDay
18.03.2012=FreeDay
19.03.2012=WorkDay
20.03.2012=WorkDay
21.03.2012=WorkDay
22.03.2012=WorkDay
23.03.2012=WorkDay
24.03.2012=FreeDay
25.03.2012=FreeDay
26.03.2012=WorkDay
27.03.2012=WorkDay
28.03.2012=WorkDay
29.03.2012=WorkDay
30.03.2012=WorkDay
31.03.2012=FreeDay
01.04.2012=FreeDay
02.04.2012=WorkDay
03.04.2012=WorkDay
04.04.2012=WorkDay
05.04.2012=WorkDay
06.04.2012=WorkDay
07.04.2012=FreeDay
08.04.2012=FreeDay
09.04.2012=WorkDay
10.04.2012=WorkDay
11.04.2012=WorkDay
12.04.2012=WorkDay
13.04.2012=WorkDay
14.04.2012=FreeDay
15.04.2012=FreeDay
16.04.2012=WorkDay
17.04.2012=WorkDay
18.04.2012=WorkDay
19.04.2012=WorkDay
20.04.2012=WorkDay
21.04.2012=FreeDay
22.04.2012=FreeDay
23.04.2012=WorkDay
24.04.2012=WorkDay
25.04.2012=WorkDay
26.04.2012=WorkDay
27.04.2012=WorkDay
28.04.2012=WorkDay
29.04.2012=FreeDay
30.04.2012=FreeDay
01.05.2012=FreeDay
02.05.2012=WorkDay
03.05.2012=WorkDay
04.05.2012=WorkDay
05.05.2012=WorkDay
06.05.2012=FreeDay
07.05.2012=FreeDay
08.05.2012=FreeDay
09.05.2012=FreeDay
10.05.2012=WorkDay
11.05.2012=WorkDay
12.05.2012=WorkDay
13.05.2012=FreeDay
14.05.2012=WorkDay
15.05.2012=WorkDay
16.05.2012=WorkDay
17.05.2012=WorkDay
18.05.2012=WorkDay
19.05.2012=FreeDay
20.05.2012=FreeDay
21.05.2012=WorkDay
22.05.2012=WorkDay
23.05.2012=WorkDay
24.05.2012=WorkDay
25.05.2012=WorkDay
26.05.2012=FreeDay
27.05.2012=FreeDay
28.05.2012=WorkDay
29.05.2012=WorkDay
30.05.2012=WorkDay
31.05.2012=WorkDay
01.06.2012=WorkDay
02.06.2012=FreeDay
03.06.2012=FreeDay
04.06.2012=WorkDay
05.06.2012=WorkDay
06.06.2012=WorkDay
07.06.2012=WorkDay
08.06.2012=WorkDay
09.06.2012=WorkDay
10.06.2012=FreeDay
11.06.2012=FreeDay
12.06.2012=FreeDay
13.06.2012=WorkDay
14.06.2012=WorkDay
15.06.2012=WorkDay
16.06.2012=FreeDay
17.06.2012=FreeDay
18.06.2012=WorkDay
19.06.2012=WorkDay
20.06.2012=WorkDay
21.06.2012=WorkDay
22.06.2012=WorkDay
23.06.2012=FreeDay
24.06.2012=FreeDay
25.06.2012=WorkDay
26.06.2012=WorkDay
27.06.2012=WorkDay
28.06.2012=WorkDay
29.06.2012=WorkDay
30.06.2012=FreeDay
01.07.2012=FreeDay
02.07.2012=WorkDay
03.07.2012=WorkDay
04.07.2012=WorkDay
05.07.2012=WorkDay
06.07.2012=WorkDay
07.07.2012=FreeDay
08.07.2012=FreeDay
09.07.2012=WorkDay
10.07.2012=WorkDay
11.07.2012=WorkDay
12.07.2012=WorkDay
13.07.2012=WorkDay
14.07.2012=FreeDay
15.07.2012=FreeDay
16.07.2012=WorkDay
17.07.2012=WorkDay
18.07.2012=WorkDay
19.07.2012=WorkDay
20.07.2012=WorkDay
21.07.2012=FreeDay
22.07.2012=FreeDay
23.07.2012=WorkDay
24.07.2012=WorkDay
25.07.2012=WorkDay
26.07.2012=WorkDay
27.07.2012=WorkDay
28.07.2012=FreeDay
29.07.2012=FreeDay
30.07.2012=WorkDay
31.07.2012=WorkDay
01.08.2012=WorkDay
02.08.2012=WorkDay
03.08.2012=WorkDay
04.08.2012=FreeDay
05.08.2012=FreeDay
06.08.2012=WorkDay
07.08.2012=WorkDay
08.08.2012=WorkDay
09.08.2012=WorkDay
10.08.2012=WorkDay
11.08.2012=FreeDay
12.08.2012=FreeDay
13.08.2012=WorkDay
14.08.2012=WorkDay
15.08.2012=WorkDay
16.08.2012=WorkDay
17.08.2012=WorkDay
18.08.2012=FreeDay
19.08.2012=FreeDay
20.08.2012=WorkDay
21.08.2012=WorkDay
22.08.2012=WorkDay
23.08.2012=WorkDay
24.08.2012=WorkDay
25.08.2012=FreeDay
26.08.2012=FreeDay
27.08.2012=WorkDay
28.08.2012=WorkDay
29.08.2012=WorkDay
30.08.2012=WorkDay
31.08.2012=WorkDay
01.09.2012=FreeDay
02.09.2012=FreeDay
03.09.2012=WorkDay
04.09.2012=WorkDay
05.09.2012=WorkDay
06.09.2012=WorkDay
07.09.2012=WorkDay
08.09.2012=FreeDay
09.09.2012=FreeDay
10.09.2012=WorkDay
11.09.2012=WorkDay
12.09.2012=WorkDay
13.09.2012=WorkDay
14.09.2012=WorkDay
15.09.2012=FreeDay
16.09.2012=FreeDay
17.09.2012=WorkDay
18.09.2012=WorkDay
19.09.2012=WorkDay
20.09.2012=WorkDay
21.09.2012=WorkDay
22.09.2012=FreeDay
23.09.2012=FreeDay
24.09.2012=WorkDay
25.09.2012=WorkDay
26.09.2012=WorkDay
27.09.2012=WorkDay
28.09.2012=WorkDay
29.09.2012=FreeDay
30.09.2012=FreeDay
01.10.2012=WorkDay
02.10.2012=WorkDay
03.10.2012=WorkDay
04.10.2012=WorkDay
05.10.2012=WorkDay
06.10.2012=FreeDay
07.10.2012=FreeDay
08.10.2012=WorkDay
09.10.2012=WorkDay
10.10.2012=WorkDay
11.10.2012=WorkDay
12.10.2012=WorkDay
13.10.2012=FreeDay
14.10.2012=FreeDay
15.10.2012=WorkDay
16.10.2012=WorkDay
17.10.2012=WorkDay
18.10.2012=WorkDay
19.10.2012=WorkDay
20.10.2012=FreeDay
21.10.2012=FreeDay
22.10.2012=WorkDay
23.10.2012=WorkDay
24.10.2012=WorkDay
25.10.2012=WorkDay
26.10.2012=WorkDay
27.10.2012=FreeDay
28.10.2012=FreeDay
29.10.2012=WorkDay
30.10.2012=WorkDay
31.10.2012=WorkDay
01.11.2012=WorkDay
02.11.2012=WorkDay
03.11.2012=FreeDay
04.11.2012=FreeDay
05.11.2012=FreeDay
06.11.2012=WorkDay
07.11.2012=WorkDay
08.11.2012=WorkDay
09.11.2012=WorkDay
10.11.2012=FreeDay
11.11.2012=FreeDay
12.11.2012=WorkDay
13.11.2012=WorkDay
14.11.2012=WorkDay
15.11.2012=WorkDay
16.11.2012=WorkDay
17.11.2012=FreeDay
18.11.2012=FreeDay
19.11.2012=WorkDay
20.11.2012=WorkDay
21.11.2012=WorkDay
22.11.2012=WorkDay
23.11.2012=WorkDay
24.11.2012=FreeDay
25.11.2012=FreeDay
26.11.2012=WorkDay
27.11.2012=WorkDay
28.11.2012=WorkDay
29.11.2012=WorkDay
30.11.2012=WorkDay
01.12.2012=FreeDay
02.12.2012=FreeDay
03.12.2012=WorkDay
04.12.2012=WorkDay
05.12.2012=WorkDay
06.12.2012=WorkDay
07.12.2012=WorkDay
08.12.2012=FreeDay
09.12.2012=FreeDay
10.12.2012=WorkDay
11.12.2012=WorkDay
12.12.2012=WorkDay
13.12.2012=WorkDay
14.12.2012=WorkDay
15.12.2012=FreeDay
16.12.2012=FreeDay
17.12.2012=WorkDay
18.12.2012=WorkDay
19.12.2012=WorkDay
20.12.2012=WorkDay
21.12.2012=WorkDay
22.12.2012=FreeDay
23.12.2012=FreeDay
24.12.2012=WorkDay
25.12.2012=WorkDay
26.12.2012=WorkDay
27.12.2012=WorkDay
28.12.2012=WorkDay
29.12.2012=WorkDay
30.12.2012=FreeDay
31.12.2012=FreeDay

Просмотров: 1950 | Добавил: NetSoftWare | Рейтинг: 4.0/1
Всего комментариев: 1
1 NetSoftWare  
0

Имя *:
Email *:
Код *: