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

Вниз

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

 
lika   (2004-02-25 08:09) [0]

читаю строку(вид примерно такой),читаю через readln(f,s):
192.168.200.162, INTERNET\fedorova, Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; Hotbar 4.4.2.0), -, 2/16/2004, 0:04:20, -, PROXYSERVER, -, www.shake-cocktails.com, -, 80, 0, 599, 250, http, -, GET, http://www.shake-cocktails.com/img/general/backgrounds/main.gif, -, NotModified, 0, -, LANCLIENT, Allow rule
здесь понятно что надо затем анализировать до ", " для верности , но вот такой вопрос когда я читаю мне некоторые данные из этой строки не нужны(к примеру ненужно Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; Hotbar 4.4.2.0) и т.д.).
Как можно прочитать данную строку пропуская некоторые фрагменты(данные) чтобы программа не перебирала данный набор символов, хочу таким образом съэкономить память и увеличить быстродействие чтения.


 
olookin ©   (2004-02-25 08:58) [1]

После удаления текущего фрагмента сделать
Delete(s,1,Pos(",",s)-1)


 
Иван Николаевич Понырев   (2004-02-25 09:13) [2]

2 lika
быстродействие это не увеличит, а увеличит, напротив, чтение всего куска лога разом


 
lika   (2004-02-25 09:16) [3]

Тогда как данный лог читать кусками, т.е. те куски которые мне нужны?


 
olookin ©   (2004-02-25 09:19) [4]

Куски запятой отделены? Тогда так

i: inetger;
ar: array of string;

i:=0;
while Pos(",",s)<>0 do begin
Setlength(ar,i+1);
ar[i]:=Copy(s,1,Pos(",",s)-1);
Delete(s,1,Pos(",",s)); Inc(i); end;

И в конце получаем массив логов или кусков логов или как там еще это называется


 
Erik ©   (2004-02-25 09:41) [5]

Можеш попробовать ReadBlokc + Seek, но если у тебя данные нефиксированой длины то быстродействия это неувеличит. Скорее всего readln наиболее оптимально.


 
lika   (2004-02-25 09:48) [6]

у меня данные не фиксированной длины.


 
Anatoly Podgoretsky ©   (2004-02-25 09:57) [7]

lika (25.02.04 09:16) [3]
Читать кусками неправильно, как раз путь чтения строки самый правильный, ты полцчаешь минимальную значимую единицу.

А разборку надо делать по двум разделителям - по запятой и по курглым скобкам (третье поле)


 
Anatoly Podgoretsky ©   (2004-02-25 09:59) [8]

Если лог не очень большой, не более 200 мб, то можно еще его загрузить в StringList и уже там обрабатывать по строкам в цикле.


 
lika   (2004-02-25 10:10) [9]

>>Anatoly Podgoretsky
Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; Hotbar 4.4.2.0)- ЭТО ОДНА ЗАПИСЬ в логе. Логи до 200МБ точно. Но вот тут тупик если работать через СтригЛист, дело в том что при чтении может быть к примеру такая строка:
192.168.5.201, anonymous, Pattern Download Session, -, 2/11/2004, 8:00:19, -, SERVER-POST, -, wp-isa.update.trendmicro.com, -, 80, 0, 272, 4528, http, -, GET, http://wp-isa.update.trendmicro.com/WP-ISA/cgi-bin/patdownload.cgi?Serial=APGE-9999-6886-8880-5322&Version=749&vsapi,=ye s, -, -, 407, -, -, -

Где можно наблюдать что встречаются пробелы в данных лога не только как разделитель записей но и в самой записи(Pattern Download Session) т.е. при чтении я получу три разных строки вместо одной. На сколько я знаю СтрингЛист разделяет если иежду сосоедними данными есть пробел.
Поясните если я в чем то не права по не применимости СтригЛиста.


 
TUser ©   (2004-02-25 10:17) [10]

Используй рег. выражения.



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

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

Наверх




Память: 0.49 MB
Время: 0.011 c
11-12312
avakss
2003-06-19 10:33
2004.03.05
FTPSERVER


1-12380
Laymer
2004-02-25 07:45
2004.03.05
Числа с плавующей запятой.


1-12324
Ads
2004-02-22 22:24
2004.03.05
DsgnIntf не найден в Delphi 7


9-12223
lokid7
2003-08-18 13:08
2004.03.05
Скелетная анимация


1-12384
Asd
2004-02-25 16:15
2004.03.05
ListView