A
at
Гость
Версия AutoIt: 3.3.6.1
Описание: Час Добрый, Всем! Скрипт должен выполнять команду при появлении в файле prog.log определенной строки. Все, что я пробовал сделать не приносит положительный результат. В процессе решения этого вопроса, у меня сложилось мнение, что скрипт просто не успевает прочесть строку. Почему я так считаю: если взять мой скрипт или вариант, который предложил madmasles и протестировать на копии этого логфайла условие появления новой строки все работает правильно. Но стоит только подключить скрипт к реальному логу и ситуация меняется – скрипт просто не реагирует на появление заданной строки. Запрета на чтение логфайла нет, проверил. Прошу помочь решить данную задачу.
Мой скрипт:
Описание: Час Добрый, Всем! Скрипт должен выполнять команду при появлении в файле prog.log определенной строки. Все, что я пробовал сделать не приносит положительный результат. В процессе решения этого вопроса, у меня сложилось мнение, что скрипт просто не успевает прочесть строку. Почему я так считаю: если взять мой скрипт или вариант, который предложил madmasles и протестировать на копии этого логфайла условие появления новой строки все работает правильно. Но стоит только подключить скрипт к реальному логу и ситуация меняется – скрипт просто не реагирует на появление заданной строки. Запрета на чтение логфайла нет, проверил. Прошу помочь решить данную задачу.
Мой скрипт:
Код:
#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
$vScript_Name = GUICtrlRead($vInput_1)
EndIf
$sFile = 'C:\prog.log'
$sRead = FileReadLine($sFile, -1)
$sString_Buy = StringRegExp($sRead, '(?m)^(.*?\[.*?INFO.*?Script:\(Script:' & $vScript_Name & '\).*?На старт.*?БОЛИД.*)$')
$sString_Sale = StringRegExp($sRead, '(?m)^(.*?\[.*?INFO.*?Script:\(Script:' & $vScript_Name & '\).*?На старт.*?ФЕРАРРИ.*)$')
If $sString_Buy Then
Buy()
ElseIf $sString_Sale Then
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
Я изменил название темы и постарался более конкретнее объяснить задание.CreatoR : В названии темы заложен вопрос «Как прочитать последнюю строку в файле», ответ на него получен (в самом же вопросе по всей видимости).
Видимо вопрос поставлен неправильно.