iceberg Posted June 24, 2008 Share Posted June 24, 2008 I have 2 questions: 1) my problem lies in the While Loop statements (Line 31) : how do I ensure that the script gets the current "LastEOF" and the current date? Because I have declared them outside the while loop statements. not too sure how to cut and paste them inside the while loop cleanly. and also, not too sure if I can use GLOBAL inside a while statement. 2) is there anything wrong with the Global $nLastEOF = Number(IniRead($inifile, "config", "LastEOF", "LastEOF")) in line 22? If I don't use the while loop and exit the script after the frist run, the get the following results : last EOF = 22 lines current EOF = 30 lines diff = 8 but i only get 7, meaning it starts reading from line 24 and not line 23. pls help me. thanks. expandcollapse popup#include <Date.au3> #include <Constants.au3> Opt("TrayAutoPause", 0) TraySetState() If Not FileExists(@ScriptDir & "\settings.ini") Then FileInstall("set.ini", @ScriptDir & "\settings.ini", 1) MsgBox(0, "Missing configuration file restored", "Please update the default settings.ini before proceeding.") Run("notepad.exe " & @ScriptDir & "\settings.ini", "", @SW_MAXIMIZE) Exit EndIf Global $inifile = "settings.ini" Global $YYMMDD = StringMid(@YEAR & @MON & @MDAY, 3) Global $sTextFound = "" Global $nMonitorSleep = Number((IniRead($inifile, "config", "delay", "delay")) * 60000) Global $sFileLocationName = (IniRead($inifile, "config", "FilePath", "FilePath")) & $YYMMDD & ".msg" HotKeySet("{F7}", "LeaveLoop") HotKeySet("{F8}", "endall") Global $ll, $kk = False Global $work = True Global $nLastEOF = Number(IniRead($inifile, "config", "LastEOF", "LastEOF")) Dim $array $Date = IniRead($inifile, "config", "date", "date") If $Date <> $YYMMDD Then IniWrite($inifile, "config", "date", $YYMMDD) IniWrite($inifile, "config", "LastEOF", "0") EndIf While 1 If $work Then $work = False MonitorChanges() AdlibEnable("setgoing", $nMonitorSleep) EndIf If $kk Then ExitLoop Sleep(100) WEnd Func setgoing() $work = True AdlibDisable() EndFunc ;==>setgoing Func LeaveLoop() $ll = True EndFunc ;==>LeaveLoop Func endall() $ll = True $kk = True EndFunc ;==>endall Func MonitorChanges() $nLastEOF = Number(IniRead($inifile, "config", "LastEOF", '')) $ll = False If FileOpen($sFileLocationName, 0) = -1 Then MsgBox(48, "Error!", "Log file " & $YYMMDD & ".msg could not be opened. " & @CRLF & @CRLF _ & "1. Enter a valid path in settings.ini" & @CRLF _ & "2. Check if the file exists" & @CRLF _ & "3. Make sure you have access to the file" & @CRLF _ & "4. Check if the file is not opened by another program/script", 10) FileWrite(@ScriptDir & "\error.log", "Log file error on " & _Now() & @CRLF) Exit EndIf $sTextFound = _FileMonitorLog($sFileLocationName, $nLastEOF) If $sTextFound <> "" Then If StringInStr($sTextFound, (IniRead($inifile, "config", "search", "search"))) Then $found = 0 For $x = 0 To UBound($array) - 1 If $sTextFound == $array[$x] Then $found = 1 ExitLoop EndIf Next If Not $found Then If IsArray($array) Then ReDim $array[UBound($array) + 1] Else Dim $array[1] EndIf $array[UBound($array) - 1] = $sTextFound EndIf EndIf EndIf If $ll Then Exit AppendText($array) IniWrite($inifile, "config", "LastEOF", $nLastEOF) FileClose($sFileLocationName) EndFunc ;==>MonitorChanges Func AppendText($aT) For $x = 0 To UBound($aT) - 1 $ans = StringRegExp($array[$x], ".*" & (IniRead($inifile, "config", "search", "search")) & ".*", 3) For $r = 0 To UBound($ans) - 1 If Not FileExists(@TempDir & "\ICT\") Then DirCreate(@TempDir & "\ICT\") FileWrite(@TempDir & "\ICT\" & $YYMMDD & ".txt", $ans[$r] & @CRLF) IniWrite($inifile, "config", "LastEOF", $nLastEOF) Next Next Zedna() EndFunc ;==>AppendText Func _FileMonitorLog($sFile, ByRef $nLastEOF) Local $aSplit = StringSplit(StringStripCR(FileRead($sFile)), @LF) Local $sLog = "" If ($aSplit[0] > $nLastEOF) Then For $iCC = $nLastEOF + 1 To $aSplit[0] $sLog &= $aSplit[$iCC] & @CRLF Next $nLastEOF = $aSplit[0] EndIf Return $sLog EndFunc ;==>_FileMonitorLog Func Zedna() $Found20 = "No" $TxtFile20 = StringMid(@YEAR & @MON & @MDAY, 3) $data20 = FileRead(@TempDir & "\ICT\" & $TxtFile20 & ".txt") If @error Then MsgBox(48, "Error!", "File could not be opened. " & @CRLF _ & "1. Enter a valid path" & @CRLF _ & "2. Check if the file exists" & @CRLF _ & "3. Make sure you have access to the file" & @CRLF _ & "4. Check if the file is not opened by another program/script" & @CRLF _ & "5. Current search did not find any matches to generate results", 10) FileWrite(@ScriptDir & "\error.log", "Search file error on " & _Now() & @CRLF) Else $data20 = StringSplit($data20, @CRLF, 1) For $i = 1 To $data20[0] $Line20 = $data20[$i] $array20 = StringSplit($Line20, @TAB) If $array20[0] > 11 And StringInStr($array20[12], (IniRead($inifile, "config", "search", "search"))) Then $Found20 = "Yes" $3 = StringTrimLeft($array20[3], 1) $8 = StringTrimRight($array20[8], 6) $13 = StringTrimRight($array20[13], 2) FileWrite((IniRead($inifile, "config", "sendto", "sendto")) & $3 & ".txt", $8 & @TAB) FileWrite((IniRead($inifile, "config", "sendto", "sendto")) & $3 & ".txt", $13 & @CRLF) EndIf Next FileDelete(@TempDir & "\ICT\" & $YYMMDD & ".txt") If $Found20 = "No" Then MsgBox(0, "Not found!", "Script could not find the string you were searching for.") EndIf EndIf $Time = _DateAdd('n', (IniRead($inifile, "config", "delay", "delay")), _NowCalc()) MsgBox(4096, "", "Script will perform next search on " & $Time, 10) TraySetToolTip("CCG: F8 to exit. Next search on " & $Time) EndFunc ;==>Zedna mouse not found....scroll any mouse to continue. Link to comment Share on other sites More sharing options...
PsaltyDS Posted June 24, 2008 Share Posted June 24, 2008 I have 2 questions: 1) my problem lies in the While Loop statements (Line 31) : how do I ensure that the script gets the current "LastEOF" and the current date? Because I have declared them outside the while loop statements. not too sure how to cut and paste them inside the while loop cleanly. and also, not too sure if I can use GLOBAL inside a while statement. Global/Local is in the context of inside/outside Functions, not loops. 2) is there anything wrong with the Global $nLastEOF = Number(IniRead($inifile, "config", "LastEOF", "LastEOF")) in line 22? There is nothing wrong with that line. The default value of "LastEOF" doesn't make sense, since the Number() conversion will just make that "0" anyway. If I don't use the while loop and exit the script after the frist run, the get the following results : last EOF = 22 lines current EOF = 30 lines diff = 8 but i only get 7, meaning it starts reading from line 24 and not line 23. pls help me. thanks. CODE#include <Date.au3> #include <Constants.au3> Opt("TrayAutoPause", 0) TraySetState() If Not FileExists(@ScriptDir & "\settings.ini") Then FileInstall("set.ini", @ScriptDir & "\settings.ini", 1) MsgBox(0, "Missing configuration file restored", "Please update the default settings.ini before proceeding.") Run("notepad.exe " & @ScriptDir & "\settings.ini", "", @SW_MAXIMIZE) Exit EndIf Global $inifile = "settings.ini" Global $YYMMDD = StringMid(@YEAR & @MON & @MDAY, 3) Global $sTextFound = "" Global $nMonitorSleep = Number((IniRead($inifile, "config", "delay", "delay")) * 60000) Global $sFileLocationName = (IniRead($inifile, "config", "FilePath", "FilePath")) & $YYMMDD & ".msg" HotKeySet("{F7}", "LeaveLoop") HotKeySet("{F8}", "endall") Global $ll, $kk = False Global $work = True Global $nLastEOF = Number(IniRead($inifile, "config", "LastEOF", "LastEOF")) Dim $array $Date = IniRead($inifile, "config", "date", "date") If $Date <> $YYMMDD Then IniWrite($inifile, "config", "date", $YYMMDD) IniWrite($inifile, "config", "LastEOF", "0") EndIf While 1 If $work Then $work = False MonitorChanges() AdlibEnable("setgoing", $nMonitorSleep) EndIf If $kk Then ExitLoop Sleep(100) WEnd Func setgoing() $work = True AdlibDisable() EndFunc ;==>setgoing Func LeaveLoop() $ll = True EndFunc ;==>LeaveLoop Func endall() $ll = True $kk = True EndFunc ;==>endall Func MonitorChanges() $nLastEOF = Number(IniRead($inifile, "config", "LastEOF", '')) $ll = False If FileOpen($sFileLocationName, 0) = -1 Then MsgBox(48, "Error!", "Log file " & $YYMMDD & ".msg could not be opened. " & @CRLF & @CRLF _ & "1. Enter a valid path in settings.ini" & @CRLF _ & "2. Check if the file exists" & @CRLF _ & "3. Make sure you have access to the file" & @CRLF _ & "4. Check if the file is not opened by another program/script", 10) FileWrite(@ScriptDir & "\error.log", "Log file error on " & _Now() & @CRLF) Exit EndIf $sTextFound = _FileMonitorLog($sFileLocationName, $nLastEOF) If $sTextFound <> "" Then If StringInStr($sTextFound, (IniRead($inifile, "config", "search", "search"))) Then $found = 0 For $x = 0 To UBound($array) - 1 If $sTextFound == $array[$x] Then $found = 1 ExitLoop EndIf Next If Not $found Then If IsArray($array) Then ReDim $array[uBound($array) + 1] Else Dim $array[1] EndIf $array[uBound($array) - 1] = $sTextFound EndIf EndIf EndIf If $ll Then Exit AppendText($array) IniWrite($inifile, "config", "LastEOF", $nLastEOF) FileClose($sFileLocationName) EndFunc ;==>MonitorChanges Func AppendText($aT) For $x = 0 To UBound($aT) - 1 $ans = StringRegExp($array[$x], ".*" & (IniRead($inifile, "config", "search", "search")) & ".*", 3) For $r = 0 To UBound($ans) - 1 If Not FileExists(@TempDir & "\ICT\") Then DirCreate(@TempDir & "\ICT\") FileWrite(@TempDir & "\ICT\" & $YYMMDD & ".txt", $ans[$r] & @CRLF) IniWrite($inifile, "config", "LastEOF", $nLastEOF) Next Next Zedna() EndFunc ;==>AppendText Func _FileMonitorLog($sFile, ByRef $nLastEOF) Local $aSplit = StringSplit(StringStripCR(FileRead($sFile)), @LF) Local $sLog = "" If ($aSplit[0] > $nLastEOF) Then For $iCC = $nLastEOF + 1 To $aSplit[0] $sLog &= $aSplit[$iCC] & @CRLF Next $nLastEOF = $aSplit[0] EndIf Return $sLog EndFunc ;==>_FileMonitorLog Func Zedna() $Found20 = "No" $TxtFile20 = StringMid(@YEAR & @MON & @MDAY, 3) $data20 = FileRead(@TempDir & "\ICT\" & $TxtFile20 & ".txt") If @error Then MsgBox(48, "Error!", "File could not be opened. " & @CRLF _ & "1. Enter a valid path" & @CRLF _ & "2. Check if the file exists" & @CRLF _ & "3. Make sure you have access to the file" & @CRLF _ & "4. Check if the file is not opened by another program/script" & @CRLF _ & "5. Current search did not find any matches to generate results", 10) FileWrite(@ScriptDir & "\error.log", "Search file error on " & _Now() & @CRLF) Else $data20 = StringSplit($data20, @CRLF, 1) For $i = 1 To $data20[0] $Line20 = $data20[$i] $array20 = StringSplit($Line20, @TAB) If $array20[0] > 11 And StringInStr($array20[12], (IniRead($inifile, "config", "search", "search"))) Then $Found20 = "Yes" $3 = StringTrimLeft($array20[3], 1) $8 = StringTrimRight($array20[8], 6) $13 = StringTrimRight($array20[13], 2) FileWrite((IniRead($inifile, "config", "sendto", "sendto")) & $3 & ".txt", $8 & @TAB) FileWrite((IniRead($inifile, "config", "sendto", "sendto")) & $3 & ".txt", $13 & @CRLF) EndIf Next FileDelete(@TempDir & "\ICT\" & $YYMMDD & ".txt") If $Found20 = "No" Then MsgBox(0, "Not found!", "Script could not find the string you were searching for.") EndIf EndIf $Time = _DateAdd('n', (IniRead($inifile, "config", "delay", "delay")), _NowCalc()) MsgBox(4096, "", "Script will perform next search on " & $Time, 10) TraySetToolTip("CCG: F8 to exit. Next search on " & $Time) EndFunc ;==>ZednaThe only place you change $LastEOF is inside the _FileMonitorLog() function, where it is used ByRef. Since it was already Global, ByRef wasn't necessary, but it shouldn't hurt anything. Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law Link to comment Share on other sites More sharing options...
iceberg Posted June 24, 2008 Author Share Posted June 24, 2008 PsaltyDS, thanks for the elaboration. mouse not found....scroll any mouse to continue. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now