Страница 1 из 2

Обновление данных в файле...

Добавлено: 04 апр 2008, 06:15
Dr_Grizzly
Всем привет! Такую вот задачу себе поставил и пытаюсь ее решить. Есть каталог с логом от программы. Этот лог время от времени очищается. Нужно написать прогу которая бы брала из лога все содержимое и копировала в другой каталог в другой файл, чтоб этот файл шел с накоплением данных. Хочу чтоб она с равным интервалом проверяла содержимое этого лога.

Мысль такая - берем компонент Мемо, в него загружаем по сигналу таймера содержимое лога, сохраняем в файл темп.тхт.

Проблема в том, как узнать что в логе появились новые данные, и не повторять сохранение старых, при том что лог в неопределенное время обнуляется???

Re: Обновление данных в файле...

Добавлено: 04 апр 2008, 09:11
airyashov
время файла и дату модификации файла можно проверить.

Re: Обновление данных в файле...

Добавлено: 04 апр 2008, 10:43
Dr_Grizzly
airyashov писал(а):время файла и дату модификации файла можно проверить.
Я конечно об этом думал, но как быть в такой ситуации - В лог добавилась информация, мы ее всю взяли и поместили в другой файл, прошло время, лог обновился, добавилась новая информация, как нам взять только то что добавилось? Прошло еще время, лог обнулился. Прошло еще время, в лог добавилась новая информация. Вот как эти шаги контролировать, чтоб не повторять содержимое лога в нашем файле и не обнулить наш файл случайно?

Re: Обновление данных в файле...

Добавлено: 04 апр 2008, 10:44
Хыиуду
В реестре или ини-файле запоминать размер лога в момент последней синхронизации

.

Добавлено: 04 апр 2008, 11:12
BBB
Хыиуду писал(а):В реестре или ини-файле запоминать размер лога в момент последней синхронизации
А если с последней синхроницации уже успело а) почиститься б) добавиться, причм так зловредно совпало, что размер не изменился?
Да даже если и изменился, неизвестно ведь, с какого места надо сохранить лог.

У меня такая мысль. Лог писать более-менее структурированно: каждая отдельная запись занимает однй строку текста. В начале строки пишется дата + время, когда делается эта запись. Причем, дата + время пишется в определенном фиксированном формате (например:
31.03.2008, 17:23:28 : <текст>
)
При бэкапе где-то фиксировать последнюю скопированную запись лога.
При новом бэкапе читать временный лог с начала построчно, в поисках первой строки, которая по дате не меньше "зафиксированной" в прошлый раз строки.
Если есть совпадающие даты, то сравнивать сам <текст>, и начать копирование со строки, после той, что совпадает с "зафиксированной".

Re: Обновление данных в файле...

Добавлено: 04 апр 2008, 12:52
Dr_Grizzly
м-м-м да, мысль хорошая! Надо ка попробовать, я ща оценил структуру лога, там есть к чему прицепиться, уникальное значение при каждой записи.... Надеюсь что уникальное ;)

Каким методом можно быстро искать запись в Memo?

Re: Обновление данных в файле...

Добавлено: 04 апр 2008, 13:00
airyashov
не зная структуры лога трудно что-то посоветовать, обычно в лог пишутся дата и время сообщения

Re: Обновление данных в файле...

Добавлено: 04 апр 2008, 15:59
MOTOCoder
Dr_Grizzly писал(а): Каким методом можно быстро искать запись в Memo?
С помощью метода Memo1.Lines.IndexOf
[syntax='Delphi']
Idx:=Memo1.Lines.IndexOf('stroka');
[/syntax]

Re: Обновление данных в файле...

Добавлено: 05 апр 2008, 18:29
Хыиуду
А можно сам лог делать ини-файлом и работать с ним соответственно. Ну, это уже мои извраты

Re: Обновление данных в файле...

Добавлено: 06 апр 2008, 11:51
Serge_Bliznykov
Dr_Grizzly, да, а изменить программу, которая пишет в лог - это доступно?
Тогда куча более толковых (надёжных решений). Например, самое простое - программа, которая пишет в лог, не очищает его, а переименовывает старый лог и создаёт новый. Тогда можно смело всё переносить из переименованного лога в общую базу...
Вот только боюсь, что эта программа (которая в лог пишет) - это чужой "чёрный ящик" и изменить её поведение нельзя... иначе эта тема бы и не возникла ;-(

и ещё, проверять изменения лог файла лучше не по таймеру, а привязаться к событию ChangeNotification - смотри FindFirstChangeNotification или вот здесь цитата из DelphiWorld - Мониторинг каталогов - с другого форума