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