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

Вниз

Пара функций для DMClient a   Найти похожие ветки 

 
jack128 ©   (2004-07-10 01:14) [0]

Не знаю как кому, а мне нравиться просматривать различные статистические выкладки ;-)

И вот захотелось мне сколько же постов я сделал на этом форуме.. К сожелению это невозможно, но те посты, которые хранятся в архиве DMClient"a я подсчитать могу. В итоге написана пара функций, которы вы можите применить на свои архивы форумов..

// кол-во постов в файле
function GetPostCount(NickName: string; Filename: string; sl: TStrings = nil): Integer;
var
 f: boolean;
 i, j: Integer;
 CurNick: string;
 TempP: PChar;
begin
 Result := 0;
 f := Assigned(sl);
 if not f then
   sl := TStringList.Create;
 try
   sl.LoadFromFile(Filename);
   for i := 0 to sl.Count - 1 do
   begin
     CurNick := sl[i];
     if Length(CurNick) < 2 then Continue;
     if CurNick[1] <> "<" then // у кого нет мыла
     begin
       for j := 2 to Length(CurNick) - Length("&nbsp") do
       begin
         // если встретили ссылку на анкету или эту последовательность символов
         // (хз, что такое, но тоже служет признаком окончания ника)
         if (CurNick[j] = "<") or (copy(CurNick, j, Length("&nbsp")) = "&nbsp") then
         begin
           CurNick := copy(CurNick, 1, j - 2);
           Break;
         end;
       end;
     end
     else
     begin // у кого есть мыло
       TempP := @CurNick[pos(">", CurNick) + 1];
       CurNick := copy(TempP, 1, pos("<", TempP) - 1);
     end;
     if CurNick = NickName then inc(Result);
   end;
 finally
   if not f then
     sl.Free;
 end;
end;
// кол-во постов во всех файлах директории и поддиректории
function GetTotalPostCount(NickName: string; InitDir: string): Integer;
var
 ffh: THandle;
 ffd: TWin32FindData;
 sl: TStringList;
begin
 Result := 0;
 sl := nil;
 ffh := FindFirstFile(PChar(InitDir + "\*.*"), ffd);
 if ffh <> INVALID_HANDLE_VALUE then
 begin
   try
     sl := TStringList.Create;
     repeat
       if (ffd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY then
       begin
         if (string(ffd.cFileName) = ".") or (string(ffd.cFileName) = "..") then Continue;
         inc(Result, GetTotalPostCount(NickName, InitDir + "\" + ffd.cFileName))
       end
       else
         if StrToInt64Def(copy(ffd.cFileName, 1, pos(".", ffd.cFileName) - 1), -1) > 0 then
           inc(Result, GetPostCount(NickName, InitDir + "\" + ffd.cFileName, sl));
     until not FindNextFile(ffh, ffd);
   finally
     Windows.FindClose(ffh);
     sl.Free;
   end;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Caption := IntToStr(GetTotalPostCount(Edit1.Text, "F:\Internet\DeplhiMasterForums\DMClient_2.0a"));
end;


в общем пользуйтесь, если хотите..


 
jack128 ©   (2004-07-10 01:18) [1]

гы. Скрипт удалил кой какую важную детать
Попробуем так

const
 MagicStr = "&"+"n"+"b"+"s"+"p";


> for j := 2 to Length(CurNick) - Length(MagicStr) do
>        begin
>          // если встретили ссылку на анкету или эту последовательность
> символов
>          // (хз, что такое, но тоже служет признаком окончания
> ника)
>          if (CurNick[j] = "<") or (copy(CurNick, j, Length(MagicStr)) = MagicStr) then
>          begin
>            CurNick := copy(CurNick, 1, j - 2);
>            Break;
>          end;
>        end;
>      


 
DeadMeat ©   (2004-07-10 01:24) [2]

Круто... Оказывается у меня 217 постов...
Хотелось бы ещё узнать с какого по какое число... :))

---
...Death Is Only The Begining...



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

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

Наверх




Память: 0.48 MB
Время: 0.045 c
1-1090395146
kingdom
2004-07-21 11:32
2004.08.01
История DirectX


1-1090397104
dream
2004-07-21 12:05
2004.08.01
Проблема с компонентом hotkey


3-1087995153
Ata133
2004-06-23 16:52
2004.08.01
Проверка записи на уникальность


14-1089969565
guest
2004-07-16 13:19
2004.08.01
Че здесь за ботва с анкетами?


14-1089960179
Nikon777777
2004-07-16 10:42
2004.08.01
Реально ли написать программку?