Показать сообщение отдельно
  #3  
Старый 06.05.2009, 01:29
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Т.е. вас интересует какие пользователи подключались в течении суток?
Вот такой вариант, генератор вашего лога, запись в файл и обратный разбор лога с записью в новый файл без повторов.
Код:
program Project22;

{$APPTYPE CONSOLE}

uses
  SysUtils,Classes,StrUtils;

Type
  TLogRec = class
   D,T,U: String;
  end;

Const
  Users: Array[1..3] of String = ('user1 | ip=195.58.235.14','user2 | ip=81.23.190.39','user3 | ip=195.58.235.14');
  RowCount = 1000;

function LogSort(List: TStringList; Index1, Index2: Integer): Integer;
Var D1,D2,T1,T2: String;
begin
 D1 := TLogRec(List.Objects[Index1]).D;
 D2 := TLogRec(List.Objects[Index2]).D;
 T1 := TLogRec(List.Objects[Index1]).T;
 T2 := TLogRec(List.Objects[Index2]).T;

 Result := 0;
 if StrToDate(D1) < StrToDate(D2) then Result := -1;
 if StrToDate(D1) > StrToDate(D2) then Result := 1;
 if StrToDate(D1) = StrToDate(D2)
 then begin
      if StrToTime(T1) < StrToTime(T2) then Result := -1;
      if StrToTime(T1) > StrToTime(T2) then Result := 1;
     end;
end;

Var
  Rec: TLogRec;
  Log: TStringList;
  i: Integer;
  TextLog: TextFile;
  S: String;
begin
 Log := TStringList.Create;
 for i := 1 to RowCount
 do begin
    Rec := TLogRec.Create;
    Rec.D := Format('%d.%d.%d',[Random(30)+1,4,2009]);
    Rec.T := Format('%d:%d:%d',[Random(23)+1,Random(59)+1,Random(59)+1]);
    Rec.U := Users[Random(3)+1];
    Log.AddObject(Format('[%s %s] %s',[Rec.D,Rec.T,Rec.U]),Rec);
    end;
 Log.CustomSort(@LogSort);
 AssignFile(TextLog,'C:\Connect.log');
 Rewrite(TextLog);
 for i := 0 to Log.Count-1
 do WriteLn(TextLog,Log.Strings[i]);
 CloseFile(TextLog);
 Log.Free;

 AssignFile(TextLog,'C:\Connect.log');
 Reset(TextLog);
 Log := TStringList.Create;
 Log.Sorted := True;
 Log.Duplicates := dupIgnore;
 while not Eof(TextLog)
 do begin
    ReadLn(TextLog, S);
    Rec := TLogRec.Create;
    i := Pos(' ',S);
    Rec.D := Copy(S, 2, i-1);
    Rec.T := Copy(S, i+1, Pred(PosEx(']',S,i)-i));
    i := PosEx(']',S,i);
    Rec.U := Copy(S, i+2, Length(S));
    Log.AddObject(Format('%s %s',[Rec.D,Rec.U]),Rec);
    end;
 CloseFile(TextLog);

 AssignFile(TextLog,'C:\Connect1.log');
 Rewrite(TextLog);
 for i := 0 to Log.Count-1
 do WriteLn(TextLog,Log.Strings[i]);
 CloseFile(TextLog);
 Log.Free;

end.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием