|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
03.10.2010, 18:39 | #1 |
Пользователь
Регистрация: 05.10.2009
Сообщений: 21
|
Поиск подстроки в записываемом file.log
Я уже задавал аналогичный вопрос, но полного ответа так и не получил и не могу добавить сообщения в ту тему. Спрашиваю по-новой, извеняйте.
Есть file.log, куда сервер постоянно пишет новые строки и в это время нужно осуществлять мониторинг этого лога. Если бы файл просто лежал было бы намного проще, но он постоянно дописывается и может иметь хороший размер. Предположительно алгоритм должен быть что-то вроде: открыть последнюю строку содержащую подстроку ': start' в файле и со следующей строки производить поиск этих подстрок: acc(*:*,'*' :* * uses modified :* Player * disconnected :* All users disconnected : stop где вместо * может быть различный набор символов. Производить поиск пока не достигнут конец файла, запомнить позицию, закрыть файл и повторять эти процедуры в бесконечном цикле. Только вот как это кодом сделать что-то не соображу. |
03.10.2010, 19:23 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
А никак нельзя сервер переписать? Чтоб он твою программу скажем по сокетам оповещал о событии?
I'm learning to live...
|
03.10.2010, 19:38 | #3 |
Пользователь
Регистрация: 05.10.2009
Сообщений: 21
|
К сожалению исходника сервера нет и вряд ли будет. Если бы вот сервак дизасемблировать и посмотреть что можно сделать, но тут я совсем бессилен. Там есть функция автокика, но на другие события. Если есть желание покопаться, могу выслать архив сервера.
P.S.: эта прога по идее должна стоять на сервере и отсылать пакеты кика всем зашедшим игрокам у которых возникает сообщение о модифицированных файлах. Последний раз редактировалось Stilet; 03.10.2010 в 19:50. |
03.10.2010, 19:51 | #4 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Не. Я не крекер.
Максимум что ты тогда можешь сделать - это по... секундно например... считывать весь файл и анализировать последнюю строку. Ну или открывать на чтение, становится вконец, и считывать пока не встретится перевод каретки от конца идя к началу.
I'm learning to live...
|
03.10.2010, 20:11 | #5 |
Пользователь
Регистрация: 05.10.2009
Сообщений: 21
|
Там иногда в секунду несколько строк в лог добавляется, так что надо перебирать строки по очереди. Есть команда f.Strings[0]; она вроде как содержит первую строку, но как искать с помощью неё не пойму. Здесь можно скачать лог сервера http://upload.com.ua/link/901972965/
|
03.10.2010, 21:40 | #6 | |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
Цитата:
можно идти с конца в начало, или можно хранить смещение до последнего "start". Можно попробовать хранить старый файл, сравнивать его размер с новым и становится на разницу размеров файлов от конца нового файла. |
|
03.10.2010, 22:36 | #7 |
Пользователь
Регистрация: 05.10.2009
Сообщений: 21
|
Я считаю что полный ответ, это когда у меня не останется вопросов в пределах названия данной темы. Конкретно пока интересуют вопросы:
1. Как средствами Delphi 7 найти последнюю строку содержащую подстроку ': start'. 2. Как перевести каретку на следующую строку. 3. Как найти подстроку и вытащить данные из звёздочек в свои переменные в данном случае: acc(*:*,'*' Пример строки, где первая звёздочка это IP адрес, вторая порт, третья ник, они у каждого плеера разные: 1.809: Ch(3):acc(192.168.10.101:2304,'Mist er Nick_12',213487073,213487073) |
08.10.2010, 22:18 | #8 |
Пользователь
Регистрация: 05.10.2009
Сообщений: 21
|
Создано две темы а толку ноль целых, ноль десятых.
|
08.10.2010, 22:21 | #9 |
Форумчанин
Регистрация: 01.09.2009
Сообщений: 197
|
Попробуй читать консоль сервера, в инете есть куча статей на тему перенаправления записи.
|
09.10.2010, 20:30 | #10 |
Пользователь
Регистрация: 05.10.2009
Сообщений: 21
|
ZaRDaK, к сожалению в консольном режиме пишется не вся информация и ip игроков там нет. Неужели в Delphi 7 нет таких возможностей поиска в log-файлах:
1. Найти последнюю строку содержащую подстроку ': start'. 2. Перевести каретку на следующую строку. 3. Вытащить IP, порт и ник в переменные из строки: 1.809: Ch(3):acc(192.168.10.101:2304,'Nick _here',213487073,213487073) Последний раз редактировалось Riply; 09.10.2010 в 22:23. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Поиск подстроки | int 20h | Win Api | 2 | 09.08.2010 20:37 |
Поиск подстроки в строке | valdemar593 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 0 | 03.06.2010 21:42 |
поиск подстроки в строке!!! | StoneSour | Общие вопросы C/C++ | 2 | 15.03.2010 21:31 |