| 
| 
 | Вопрос # 4 127/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты!Такая ситуация: есть лог файл, который постоянно дописывается (его ведет сторонняя программа). Нужно его периодически читать и обрабатывать (раз в 5 минут например).
 Как сделать так, что бы не пришлось заново весь файл читать, а только то, что дописалось.
 Знаю, что есть функция seek, но не знаю как запомнить текущее положение курсора?
 Заранее благодарен!
 
|  |   Вопрос задал: volonter (статус: Посетитель)Вопрос отправлен: 6 мая 2010, 22:41
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 7; последнее сообщение — 7 мая 2010, 13:11; участников в обсуждении: 3. 
|   | min@y™ (статус: Доктор наук), 7 мая 2010, 08:19 [#1]: Цитата (volonter): но не знаю как запомнить текущее положение курсора В переменной типа Int64.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | SOA (статус: Посетитель), 7 мая 2010, 08:37 [#2]:В данном случае самым простым решением будет проверить переменную, в которой сохраняется номер строки предидущего считывания, после чего присвоить значение этой переменной счетчику, по которому в цикле с условием While not EOF, считывать строки и попутно увеличивать счетчик, после чего сохранить значение счетчика в переменную. |  
|   | SOA (статус: Посетитель), 7 мая 2010, 08:41 [#3]:А если нужно досканально знать положение курсора, то вводи еще одну переменную, в которую сохраняй число символов из последней строки используя функцию StrLen(), ну и соответственно придется немного изменить логику цикла. |  
|   | Вадим К (статус: Академик), 7 мая 2010, 10:18 [#4]:to SOA: а если файл на сотни мегабайт, то нужно будет снова пробегать по файлу? to volonter. идея такая.
 заводим некую переменную-курсор cur. Вначале она у нас будет равна 0.
 Код считывания лога будет такой. (это схематически!!!)
 x := Filesize(log);
 открыть файл log;
 seek(log, cur);
 while not eof(log) do begin
 readln(log, s);
 выводим s;
 end;
 cur := x;
 закрыть файл log.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | SOA (статус: Посетитель), 7 мая 2010, 11:35 [#5]:to Вадим дык яж написал что необходима переменная, в которую будет сохранен номер строки, на которую мы в следующий раз при считывании функцией seek и прыгаем, а также нужна еще одна переменная, которая будет хранить номер символа в строке, чтоб потом курсор ровно в то место где был конец поставить.
 P.S. ну а то что про seek не написал, так ето подразумевалось, т.к. автор вопроса написал что знает про эту функцию.
 |  
|   | Вадим К (статус: Академик), 7 мая 2010, 12:50 [#6]:seek не оперирует "номером строки". она не может "прыгнуть на определенную строку", только номер байта. К примеру, для бинарного файла  понятия "номер строки" не существует. Но если работать с номером строки, то каждый раз при поиске "хвоста" придется перечитать в холостую файл.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | SOA (статус: Посетитель), 7 мая 2010, 13:11 [#7]:Пардон запамятовал. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |