Что нового

[Элементы GUI] вывод лога текстового файла в реальном времени

Rjevsky

Чайник
Сообщения
102
Репутация
4
Есть программа (wget), которая пишет лог работы в текстовый файл.
Этот файл надо выводить в цикле While 1 в GuiEdit построчно. Причём актуально отображение только последних 14-ти строк
Если кто видел, лог Wget (консольный FTP клиент) во время закачки пишет в лог в реальном времени вот такую картину:

...
49550K .......... .......... .......... .......... .......... 97% 6.42M 0s
49600K .......... .......... .......... .......... .......... 98% 6.99M 0s
49650K .......... .......... .......... .......... .......... 98% 4.45M 0s
49700K .......... .......... .......... .......... .......... 98% 2.77M 0s
49750K .......... .......... .......... .......... .......... 98% 5.29M 0s
49800K .......... .......... .......... .......... .......... 98% 4.81M 0s
49850K .......... .......... .......... .......... .......... 98% 7.86M 0s
49900K .......... .......... .......... .......... .......... 98% 5.42M 0s
49950K .......... .......... .......... .......... .......... 98% 6.07M 0s
50000K .......... .......... .......... .......... .......... 98% 2.55M 0s
50050K .......... .......... .......... .......... .......... 98% 7.14M 0s
50100K .......... .......... .......... .......... .......... 99% 4.36M 0s
50150K .......... .......... .......... .......... .......... 99% 4.21M 0s
50200K .......... .......... .......... .......... .......... 99% 4.02M 0s
50250K .......... .......... .......... .......... .......... 99% 7.17M 0s
50300K .......... .......... .......... .......... .......... 99% 4.14M 0s
50350K .......... .......... .......... .......... .......... 99% 2.30M 0s
50400K .......... .......... .......... .......... .......... 99% 7.19M 0s
50450K .......... .......... .......... .......... .......... 99% 4.28M 0s
50500K .......... .......... .......... .......... .......... 99% 4.53M 0s
50550K .......... .......... .......... .......... .......... 99% 7.59M 0s
50600K .......... .. 100% 2.19M=2.6s

226 Transfer complete
2009-12-01 22:42:57 (4.26 MB/s) - `D:/autoit/wget2/Reanimator1.61b.rar' saved [51827596]
Т.е рисует эти точки по мере закачки файла, а так же выводит информацию об ошибках, об успешном/неуспешном выполнении и тд и тп. Те. актуальны только последние строки, остальные ненужны, но сам логфайл желательно сохранять в целостности.


Сначала я сделал так:
Код:
$logfile = FileOpen(@ScriptDir & '\log.txt',0)

While 1
$line = FileRead($logfile)
sleep (20)
_GUICtrlEdit_AppendText($edit1, $line )
WEnd

Всё отображалось просто супер, но оказалось, что текстовое поле не бесконечно и на каком то этапе стопорится. Если это можно като обойти, то, возможно, этот вариант мне тоже подошёл бы.

Тогда, я сделал так:
Код:
_FileReadToArray(@ScriptDir & '\log.txt', $arraydown)
$stringdown = _ArrayToString($arraydown, @CRLF, $arraydown[0]-14, $arraydown[0])
_GUICtrlEdit_SetText($Edit1, $stringdown)


Этот способ тоже красиво выводит лог вровень моего окошка GuiEdit, но по мере разростания лога начинает сильно грузить процессор. Значит способ не очень...
Может кто то подскажет красивый способ...? :'(
Может надо просто Edit-у какойто режим выставить?

Ещё нежелательно использование использование sleep т.к. нужно, что бы хорошо откликались кнопки gui из этого цикла
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1 517
Репутация
321
У GUICtrlEdit стоит лимит текста в 32 кб
Что бы его убрать
Код:
$Edit1 = GUICtrlCreateEdit("", 0, 0, 400, 300)
GUICtrlSetLimit($Edit1, 1000000)

Если этого не хватает, можно поставить больше :smile: Главное не переборщить :smile:
 
Автор
R

Rjevsky

Чайник
Сообщения
102
Репутация
4
Здоровски! Всё гениальое, как всегда - просто!
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 159
Репутация
2 329
Medic84 [?]
Код:
GUICtrlSetLimit($Edit1, 1000000)

Если этого не хватает, можно поставить больше
Лучше так:
Код:
GUICtrlSendMsg($Edit1, $EM_LIMITTEXT, -1, 0)
 
Автор
R

Rjevsky

Чайник
Сообщения
102
Репутация
4
Всем спасибо за участие!
 
Верх