![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Всем привет.
Нужен аналог tail -f <...> |grep <...> для мониторинга больших файлов. Дабы выводились эти самые хвостики на экран,в memo или куданить исчо. Подскажите, пожалуйста. |
|
#2
|
||||
|
||||
|
Я видимо не в теме, можно поподробнее?
|
|
#3
|
||||
|
||||
|
Есть такая *nix-овая команда tail,которая идет читает конец файла.
С ключом -f продолжает читать до остановки пользователем. grep -поиск слова тоесть он читает конец файла,и ищет совпадения-выдает строку со словом |
|
#4
|
||||
|
||||
|
Т.е. чтение с конца файла до нахождения определенного вхождения?
|
|
#5
|
||||
|
||||
|
Лично я с работой этой комманды незнаком, опишите как можно подробнее.
Насколько большой этот конец файла в строках. Что значит "С ключом -f продолжает читать до остановки пользователем." и т.д. |
|
#6
|
||||
|
||||
|
Цитата:
я себе эта так представляю,хотя могу ошибаться. открывается файл,ставится метка,при изменении файла,от еэтой метки к концу файла идет поиск ключевого слова,при нахождении запоминается позиция,строка выводится на экран и продолжает поиск до конца файла... Ну эт я так думаю. Просто идей особых у меня нету.Fopen делать файлам около 300-500 Мб желания нету. Мне хотя бы идеи какие-нить ![]() |
|
#7
|
||||
|
||||
|
Цитата:
Это nix-овая команда(САМАЯ ИЗВЕСТАНАЯ ),но будет работать и в CMD.exe/tail -f [путь к файлу] |grep [слово,котороебудешь искать] при появлении этого слова в файле - выдаст на экран. |
|
#8
|
||||
|
||||
|
Если-бы у меня была возможность ее посмотреть, я бы вопросы не задавал. В микрософтовых осях такого не наблюдается.
Но сразу вижу проблему, которой под никсами по слухам нет - занятость файла. Если прога которая обновляет этот файл, держит его постоянно открытым, то ось так просто этот файл не даст для открытия вашему приложению. Попробуйте для начала получить доступ к нему таким путем: Код:
procedure TForm33.Button1Click(Sender: TObject);
Var
F: TFileStream;
S: Array[1..20] of AnsiChar;
begin
F := TFileStream.Create('c:\test.txt',fmOpenRead + fmShareCompat);
F.Seek(-20, soFromEnd);
F.Read(S, 20);
F.Free;
Memo1.Text := S;
end; |
|
#9
|
||||
|
||||
|
Цитата:
Получилось. Последние 20 символов в мемо вывел. Мб,сделать таймер на вывод?? Тогда получится обычный tail.... |
|
#10
|
||||
|
||||
|
Ну тогда дальше дело простого дизайна. Определится с необходимым количеством выводимой информации, вместо пробных 20 байт.
Если предполагается осуществлять мониторинг на постоянной основе, тогда конечно обработать в события таймера очередной поиск по ключевому слову. Основу я вам дал, дальше только полет вашей фантазии. |
|
#11
|
||||
|
||||
|
Кстати, если у вас файл меняет при обновлении размер или дату, тогда можно начинать с проверки этих данных, а уже потом проводить поиск по ключевым словам.
|
|
#12
|
||||
|
||||
|
Еще вопросик:а если файлов 20 штук.
Они довольно большие. Вот например щаз 2 файла весят на сегодняшний момент - 3 мб каждый. к вечеру соответсвенно - будет 100,может больше И таких не один \\\\\\\\ Могут ли бы проблемы? |
|
#13
|
||||
|
||||
|
Так попробуйте, если все без ошибок сделаете, то проблем не вижу. Задача-то вроде не сильно сложная и не сильно напряжная для компа.
|