A
at
Гость
Час Добрый Всем! Прошу помощь.
Есть программа, которая ведет непрерывно запись в свой лог файл. При появлении в лог файле нужной строки мой скрипт должен сменить эту строчку на шаблон. Мой скрипт работает отлично, но проблема заключается в том, что программа, которая ведет лог видимо не дает вносить изменения в свой логфайл в рабочем режиме. Т.е. мой скрипт видит эти строки, но изменить их не может.
скрипт:
Добавлено:
Прошу подсказать, на сколько это возможно реализовать. Другого способа не знаю. Пытаюсь считывать последнюю строку без перезаписи, но тут другая проблема получается. Скрипт просто пропускает изменение в логе (т.е. не видит).
Есть программа, которая ведет непрерывно запись в свой лог файл. При появлении в лог файле нужной строки мой скрипт должен сменить эту строчку на шаблон. Мой скрипт работает отлично, но проблема заключается в том, что программа, которая ведет лог видимо не дает вносить изменения в свой логфайл в рабочем режиме. Т.е. мой скрипт видит эти строки, но изменить их не может.
скрипт:
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$hForm = GUICreate('PROGA', 152, 65, 225, 150)
$vInput_1 = GUICtrlCreateInput('', 32, 8, 105, 21)
$vLabel_Info = GUICtrlCreateLabel(' ... жду строку', 32, 40, 84, 17)
$vCheckbox1 = GUICtrlCreateCheckbox('', 8, 9, 17, 15)
GUISetState(@SW_SHOW)
Global $vScript_Name, $sFile, $sRead
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
If GUICtrlRead($vCheckbox1) = $GUI_CHECKED Then
Sleep(100)
$vScript_Name = GUICtrlRead($vInput_1)
EndIf
$sFile = 'C:\prog.log'
$sRead = FileRead($sFile)
$sString_Buy = StringRegExp($sRead, '(?m)^(.*?\[.*?INFO.*?Script:\(Script:' & $vScript_Name & '\).*?На старт.*?феррари.*)$')
$sText_Buy = '(?m)^(.*?\[.*?INFO.*?Script:\(Script:' & $vScript_Name & '\).*?На старт.*?феррари.*)$'
$sReplace_Text_Buy = @HOUR & ':' & @MIN & ':' & @SEC & '.' & '<<< ЗАМЕНА СТРОКИ ФЕРРАРИ>>>' & @CRLF
$sString_Sale = StringRegExp($sRead, '(?m)^(.*?\[.*?INFO.*?Script:\(Script:' & $vScript_Name & '\).*?Настарт.*?болид.*)$')
$sText_Sale = '(?m)^(.*?\[.*?INFO.*?Script:\(Script:' & $vScript_Name & '\).*?На старт.*?болид.*)$'
$sReplace_Text_Sale = @HOUR & ':' & @MIN & ':' & @SEC & '.' & '<<< ЗАМЕНА СТРОКИ БОЛИД>>>' & @CRLF
If $sString_Buy Then
Sleep(100)
$sReplace_Buy = StringRegExpReplace($sRead, $sText_Buy, $sReplace_Text_Buy)
FileDelete($sFile)
FileWrite($sFile, $sReplace_Buy)
Buy()
ElseIf $sString_Sale Then
Sleep(100)
$sReplace_Sale = StringRegExpReplace($sRead, $sText_Sale, $sReplace_Text_Sale)
FileDelete($sFile)
FileWrite($sFile, $sReplace_Sale)
Sale()
EndIf
WEnd
Func Buy()
Sleep(10)
$vLabel_Info = GUICtrlCreateLabel("ФЕРРАРИ", 32, 40, 84, 17)
EndFunc
Func Sale()
Sleep(10)
$vLabel_Info = GUICtrlCreateLabel("БОЛИД", 32, 40, 84, 17)
EndFunc
Добавлено:
Сообщение автоматически объединено:
Прошу подсказать, на сколько это возможно реализовать. Другого способа не знаю. Пытаюсь считывать последнюю строку без перезаписи, но тут другая проблема получается. Скрипт просто пропускает изменение в логе (т.е. не видит).