Главная страница
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.014 c
1-77471
ASV2
2002-06-11 20:51
2002.06.24
Изменение parent


3-77254
Fissher
2002-05-29 16:43
2002.06.24
Чтение из ini - файла


6-77543
Maikl
2002-04-11 10:52
2002.06.24
Опять клиент ищет сервер


3-77272
Катерина
2002-05-29 14:20
2002.06.24
Считывание dBase таблиц


14-77582
tormoZZZ
2002-05-21 13:06
2002.06.24
Stream...