Форум: "Основная";
Текущий архив: 2002.06.24;
Скачать: [xml.tar.bz2];
ВнизРабота с логами Найти похожие ветки
← →
Александр (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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c