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

Вниз

Работа с логами   Найти похожие ветки 

 
Александр ©   (2002-06-11 17:19) [0]

Здравствуйте программисты! У меня есть вопрос по работе с файлами... Есть сервер Апаче, который ведет логи в файле 1.log. Структура файла такая:
[День недели Месяц число время год] [что это] [client его ip] и само замечание или сообщение
Пример:
[Fri May 10 19:12:36 2002] [error] [client 192.168.33.105] File does not exist: c:/www/home/localhost/www/chat.htm
И так тысячи или даже миллионы строк. Мне надо написаь программу, которая вытаскивала всю информацию из эого файла, например все ip, кроме моего, записывала в ListBox1; ошибки все в другой листбокс. Как мне это сделать?
Спасибо


 
Song ©   (2002-06-11 17:23) [1]

Ну дак очевидно что считывать из файла - WriteLn() и анализировать - Pos()


 
Александр ©   (2002-06-11 17:25) [2]

А можно поподробнее пожалуйста.


 
Song ©   (2002-06-11 18:21) [3]

AssignFile() .. WriteLn() .. CloseFile()
По первой процедуре смотрите хэлп, там пример есть.


 
Almaz ©   (2002-06-12 00:37) [4]


> Song © (11.06.02 18:21)
> Ну дак очевидно что считывать из файла - WriteLn()

Уважаемый, ВЫ ЧТО ? Так он все логи сотрет - не WriteLn а ReadLn.

Удачи.


 
Almaz ©   (2002-06-12 01:01) [5]


> Александр © (11.06.02 17:25)

Ну вот набросал кое-что вроде работает :)) По крайней мере с идеей разберетесь:

procedure TForm1.Button1Click(Sender: TObject);
var
F: TextFile;
S, strData, strIP, strEvent, strMessage: String;
First, Last: Integer;
begin
AssignFile(F, "C:\1.log");
Reset(F);
while not EOF(F) do
begin
ReadLn(F, S);
First := Pos("[", S);
Last := Pos("]", S);
strData := Copy(S, First + 1, Last - First - 1); // Дата
S := Copy(S, Last + 1, Length(S));
ListBox1.Items.Add(strData);

First := Pos("[", S);
Last := Pos("]", S);
strEvent := Copy(S, First + 1, Last - First - 1); // Что это
S := Copy(S, Last + 1, Length(S));
ListBox2.Items.Add(strEvent);

First := Pos("client", S);
Last := Pos("]", S);
strIP := Copy(S, First + 7, Last - First - 7); // IP адрес
S := Copy(S, Last + 1, Length(S));
ListBox3.Items.Add(strIP);

strMessage := Trim(S); // Текст сообщения
ListBox4.Items.Add(strMessage);
end;
CloseFile(F);
end;


Удачи.


 
Song ©   (2002-06-12 10:13) [6]

Sorry...
Almaz, Вы - максималист :))


 
Александр ©   (2002-06-12 15:27) [7]

Спасибо Вам всем! Сделал почти..теперь делаю приятный интерфейс:)
А по поводу ВритеЛн и реадЛн эт сразу понял:)


 
Smok_er   (2002-06-12 15:33) [8]

Интересно, а не быстрее бы в данном случае была бы обработка, если бы использовать стринглист и к строкам обращаться по индексу?
Дело в том, что у меня аналогичная проблема решена так.
Переделывать и экспериментировать нет времени, может кто-нибудь уже пробовал эти 2 варианта и определил более быстрый?


 
Anatoly Podgoretsky ©   (2002-06-12 20:16) [9]

Зависат от размера


 
Smok_er   (2002-06-12 23:58) [10]

ну 4-10 метров например


 
Anatoly Podgoretsky ©   (2002-06-13 00:16) [11]

Не я не про такие маленькие размеры, что нибудь более 500 мб, ддя длгов апче это не редкость. В вопросе ничего не указано про ОС и соответсвенно про ограничитель строк, если речь идет о Линуксе, то ReadLn не очень подходит


 
Александр ©   (2002-06-13 20:21) [12]

Речь идет в общем то о Windows 2000 на системе NTFSб так что как линус грубо (очень) говоря.



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

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

Наверх




Память: 0.49 MB
Время: 0.029 c
1-77361
Aleksandr
2002-06-13 11:13
2002.06.24
Истчо вопрос по DLL


3-77304
bnn
2002-05-31 11:00
2002.06.24
Проблема при переносе программы.


14-77598
Wadim
2002-05-22 00:35
2002.06.24
Как удалить инициализацию программ?


7-77627
KPOT
2002-03-27 16:09
2002.06.24
Delphi 6 Update Pack 2


3-77256
!Daemon
2002-05-29 22:56
2002.06.24
Как узнать тип столбца в Oracle?