Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2010, 18:39   #1
Riply
Пользователь
 
Регистрация: 05.10.2009
Сообщений: 21
По умолчанию Поиск подстроки в записываемом file.log

Я уже задавал аналогичный вопрос, но полного ответа так и не получил и не могу добавить сообщения в ту тему. Спрашиваю по-новой, извеняйте.

Есть file.log, куда сервер постоянно пишет новые строки и в это время нужно осуществлять мониторинг этого лога. Если бы файл просто лежал было бы намного проще, но он постоянно дописывается и может иметь хороший размер. Предположительно алгоритм должен быть что-то вроде:
открыть последнюю строку содержащую подстроку ': start' в файле и со следующей строки производить поиск этих подстрок:
acc(*:*,'*'
:* * uses modified
:* Player * disconnected
:* All users disconnected
: stop
где вместо * может быть различный набор символов.
Производить поиск пока не достигнут конец файла, запомнить позицию, закрыть файл и повторять эти процедуры в бесконечном цикле. Только вот как это кодом сделать что-то не соображу.
Riply вне форума Ответить с цитированием
Старый 03.10.2010, 19:23   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А никак нельзя сервер переписать? Чтоб он твою программу скажем по сокетам оповещал о событии?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.10.2010, 19:38   #3
Riply
Пользователь
 
Регистрация: 05.10.2009
Сообщений: 21
По умолчанию

К сожалению исходника сервера нет и вряд ли будет. Если бы вот сервак дизасемблировать и посмотреть что можно сделать, но тут я совсем бессилен. Там есть функция автокика, но на другие события. Если есть желание покопаться, могу выслать архив сервера.

P.S.: эта прога по идее должна стоять на сервере и отсылать пакеты кика всем зашедшим игрокам у которых возникает сообщение о модифицированных файлах.

Последний раз редактировалось Stilet; 03.10.2010 в 19:50.
Riply вне форума Ответить с цитированием
Старый 03.10.2010, 19:51   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не. Я не крекер.
Максимум что ты тогда можешь сделать - это по... секундно например... считывать весь файл и анализировать последнюю строку.
Ну или открывать на чтение, становится вконец, и считывать пока не встретится перевод каретки от конца идя к началу.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.10.2010, 20:11   #5
Riply
Пользователь
 
Регистрация: 05.10.2009
Сообщений: 21
По умолчанию

Там иногда в секунду несколько строк в лог добавляется, так что надо перебирать строки по очереди. Есть команда f.Strings[0]; она вроде как содержит первую строку, но как искать с помощью неё не пойму. Здесь можно скачать лог сервера http://upload.com.ua/link/901972965/
Riply вне форума Ответить с цитированием
Старый 03.10.2010, 21:40   #6
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Я уже задавал аналогичный вопрос, но полного ответа так и не получил
что должен содержать ответ, чтобы быть полным?
можно идти с конца в начало, или можно хранить смещение до последнего "start".
Можно попробовать хранить старый файл, сравнивать его размер с новым и становится на разницу размеров файлов от конца нового файла.
rrrFer вне форума Ответить с цитированием
Старый 03.10.2010, 22:36   #7
Riply
Пользователь
 
Регистрация: 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)
Riply вне форума Ответить с цитированием
Старый 08.10.2010, 22:18   #8
Riply
Пользователь
 
Регистрация: 05.10.2009
Сообщений: 21
По умолчанию

Создано две темы а толку ноль целых, ноль десятых.
Riply вне форума Ответить с цитированием
Старый 08.10.2010, 22:21   #9
ZaRDaK
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 197
По умолчанию

Попробуй читать консоль сервера, в инете есть куча статей на тему перенаправления записи.
ZaRDaK вне форума Ответить с цитированием
Старый 09.10.2010, 20:30   #10
Riply
Пользователь
 
Регистрация: 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.
Riply вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск подстроки 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