water Posted January 30, 2017 Share Posted January 30, 2017 The one from post #10: #include <FileConstants.au3> Global $hFile = FileOpen('C:\temp\text.txt') ; Open the file in read mode $iResult = FileSetPos($hFile, 0, $FILE_END) ; Moves the current file position to the end of the file ConsoleWrite($iResult & @CRLF) Should return True but I always get False. My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki Link to comment Share on other sites More sharing options...
kylomas Posted January 30, 2017 Share Posted January 30, 2017 biatu, F.W.I.W. This code monitors a log file and reports (email) errors found. You may be interested in the _scan_file() routine. It processes lines added since the last scan run... expandcollapse popupHotKeySet('`', '_start_monitor') ; "`" to initiate manual scan HotKeySet('{ESC}', '_exit') ; ESC to stop script #include <array.au3> #include <date.au3> #include <File.au3> Local $file_monitored = @ScriptDir & '\log.log' ; file to monitor Local $monitor_interval = 1 ; minute(s) between file check Local $bMonitor = False ; switch to start monitor local $oMyRet[2] ; array for error message from mail routine local $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc") ; error routine ; routine to start scan AdlibRegister('_start_monitor', $monitor_interval * 60 * 1000) ; main loop, will only initiate scan when the adlib routine sets the switch While 1 If $bMonitor = True Then _scan_file() $bMonitor = False EndIf Sleep(500) WEnd ; scan routine and mail formatter Func _scan_file() Local $sTMP = '' local static $FilePos = 0 ConsoleWrite(_Now() & ' >>>> Start scan' & @CRLF) ;read log file entries added since the last scan local $fl = fileopen($file_monitored) if $fl = -1 then exit msgbox(0,'','File open failed') if not filesetpos($fl,$FilePos,0) then exit msgbox(0,'ERROR','FileSetPos failed') local $mon_file = fileread($fl) $FilePos = filegetpos($fl) fileclose($fl) ; detect lines with the word "failure" and return the entire line ; format output for email If StringRegExp($mon_file, 'failure') Then $aTMP = StringRegExp($mon_file, '(.*?failure.*)\R', 3) $sTMP &= 'The following failures were found:' & @crlf for $2 = 0 to ubound($aTMP) - 1 if $aTMP[$2] = '' then continueloop $sTMP &= ' ' & $aTMP[$2] & @crlf next EndIf ; if failures were found then send the email if $sTMP then ConsoleWrite($sTMP & @CRLF) ConsoleWrite('+ Sending mail...') _mailer($sTMP) ConsoleWrite(@error ? @crlf & '! Error sending mail = ' & $oMyRet[1] & @crlf : 'Send complete' & @CRLF) Else ConsoleWrite('No failures found' & @CRLF) endif ConsoleWrite(_Now() & ' >>>> Scan Complete' & @CRLF) EndFunc ;==>_scan_file ; adlib to set switch that initiates scan Func _start_monitor() $bMonitor = True EndFunc ;==>_start_monitor Func _exit() Exit EndFunc ;==>_exit ; wrapper to set variables used in _INetSmtpMailCom Func _mailer($str) Local $SmtpServer = 'the.gmail.smtp.server' ; name of the yahoo/gmail smtp server Local $FromName = 'Me' ; what you want to appear in you inbox "From" column Local $FromAddress = 'name.of.your.gmail.account' ; name of your yahoo account Local $ToAddress = 'who.to.send.it.to' ; who you are sending the mail to Local $Subject = "Log File Exception Warning" ; title Local $Body = $str ; the body of the email Local $AttachFiles = "" ; the file(s) you want to attach seperated with a ; (Semicolon) - leave blank if not needed Local $CcAddress = "" ; address for cc - leave blank if not needed Local $BccAddress = "" ; address for bcc - leave blank if not needed Local $Importance = "Normal" ; Send message priority: "High", "Normal", "Low" Local $Username = 'same.as.$fromaddress' ; account username as known to the smtp server Local $Password = 'password' ; password for the above account Local $IPPort = 465 ; GMAIL / YAHOO port used for sending the mail Local $ssl = 1 ; GMAIL / YAHOO enables/disables secure socket layer sending - put to 1 if using httpS $rc = _INetSmtpMailCom($SmtpServer, $FromName, $FromAddress, $ToAddress, $Subject, $Body, $AttachFiles, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl) If @error Then return seterror(1) EndFunc ;==>_mailer Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Importance = "Normal", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 0) Local $objEmail = ObjCreate("CDO.Message") $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>' $objEmail.To = $s_ToAddress Local $i_Error = 0 Local $i_Error_desciption = "" If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress $objEmail.Subject = $s_Subject If StringInStr($as_Body, "<") And StringInStr($as_Body, ">") Then $objEmail.HTMLBody = $as_Body Else $objEmail.Textbody = $as_Body & @CRLF EndIf If $s_AttachFiles <> "" Then Local $S_Files2Attach = StringSplit($s_AttachFiles, ";") For $x = 1 To $S_Files2Attach[0] $S_Files2Attach[$x] = _PathFull($S_Files2Attach[$x]) ;~ ConsoleWrite('@@ Debug : $S_Files2Attach[$x] = ' & $S_Files2Attach[$x] & @LF & '>Error code: ' & @error & @LF) ;### Debug Console If FileExists($S_Files2Attach[$x]) Then ConsoleWrite('+> File attachment added: ' & $S_Files2Attach[$x] & @LF) $objEmail.AddAttachment($S_Files2Attach[$x]) Else ConsoleWrite('!> File not found to attach: ' & $S_Files2Attach[$x] & @LF) SetError(1) Return 0 EndIf Next EndIf $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer If Number($IPPort) = 0 Then $IPPort = 25 $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort ;Authenticated SMTP If $s_Username <> "" Then $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password EndIf If $ssl Then $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True EndIf ;Update settings $objEmail.Configuration.Fields.Update ; Set Email Importance Switch $s_Importance Case "High" $objEmail.Fields.Item("urn:schemas:mailheader:Importance") = "High" Case "Normal" $objEmail.Fields.Item("urn:schemas:mailheader:Importance") = "Normal" Case "Low" $objEmail.Fields.Item("urn:schemas:mailheader:Importance") = "Low" EndSwitch $objEmail.Fields.Update ; Sent the Message $objEmail.Send If @error Then SetError(2) Return $oMyRet[1] EndIf $objEmail = "" EndFunc ;==>_INetSmtpMailCom Func MyErrFunc() $HexNumber = Hex($oMyError.number, 8) $oMyRet[0] = $HexNumber $oMyRet[1] = StringStripWS($oMyError.description, 3) ;ConsoleWrite("### COM Error ! Number: " & $HexNumber & " ScriptLine: " & $oMyError.scriptline & " Description:" & $oMyRet[1] & @LF) SetError(1); something to check for when this function returns Return EndFunc ;==>MyErrFunc kylomas Biatu 1 Forum Rules Procedure for posting code "I like pigs. Dogs look up to us. Cats look down on us. Pigs treat us as equals." - Sir Winston Churchill Link to comment Share on other sites More sharing options...
Biatu Posted January 31, 2017 Author Share Posted January 31, 2017 Help@FileRead: "A negative or not defined count, reads the whole file from the current position. " If im parsing files in excess of 200MB ur solution will fail. is the best solution. What is what? What is what. 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