Jump to content

Recommended Posts

Hello, first time poster here :)

I am working on a project that has to parse a log file in real time. The thing is I know it's hard for Autoit to attach itself to log files when they're already in use by other programs, at least in my experience.

I was taking a look at this thread because the log file is quite large and I think Autoit might be a little slow on it's own.

The thing is I don't know how to use this properly to extract all data out of a log file or is there a native way to do this using Autoit.

Basically , I just need a log parser that is able to read from a log that is 'already opened' and 'being written to'

 

Thanks! :)

Link to post
Share on other sites

I do not believe that AutoIt has any difficulties, the event log UDF reads from a log that is both already opened and being written to.   Since you have told us pretty much zero about the app or file lets begin:  when the app is running can you do a simple fileread("logfile.txt")?

,-. .--. ________ .-. .-. ,---. ,-. .-. .-. .-.
|(| / /\ \ |\ /| |__ __||| | | || .-' | |/ / \ \_/ )/
(_) / /__\ \ |(\ / | )| | | `-' | | `-. | | / __ \ (_)
| | | __ | (_)\/ | (_) | | .-. | | .-' | | \ |__| ) (
| | | | |)| | \ / | | | | | |)| | `--. | |) \ | |
`-' |_| (_) | |\/| | `-' /( (_)/( __.' |((_)-' /(_|
'-' '-' (__) (__) (_) (__)

Link to post
Share on other sites

I actually haven't really written any code other than grab the File(Open,Read,Close) functions from the help file and changed the path to where my log is. I just tried it and the read does work when the application is running.

What I really would like is to be able to read each "new line" and do something and then move on to the next line.

I'm not quite sure how to start though.

Link to post
Share on other sites

there are a couple hundred ways you could do this, here is my thought:  Read to array, check the size, if it is bigger than before then read the last line.  If that works you can start getting sexy and return all the lines that are new, since you have both the previous and current size.  Something like this pseudo......

$oldnumberoflines = 0

While 1

$array = _FileReadToArray("logfile.log")

$newnumberoflines = ubound($array) - 1

If $newnumberoflines > $oldnumberoflines Then msgbox(0, '' , $array[ubound($array) - 1])

$newnumberoflines = $oldnumberoflines

sleep (5000) ; check every 5 seconds

wend

 

 

Edited by boththose

,-. .--. ________ .-. .-. ,---. ,-. .-. .-. .-.
|(| / /\ \ |\ /| |__ __||| | | || .-' | |/ / \ \_/ )/
(_) / /__\ \ |(\ / | )| | | `-' | | `-. | | / __ \ (_)
| | | __ | (_)\/ | (_) | | .-. | | .-' | | \ |__| ) (
| | | | |)| | \ / | | | | | |)| | `--. | |) \ | |
`-' |_| (_) | |\/| | `-' /( (_)/( __.' |((_)-' /(_|
'-' '-' (__) (__) (_) (__)

Link to post
Share on other sites
#include <File.au3>
#include <Array.au3>
#include <MsgBoxConstants.au3>

Global $Index = 0

$Path = "output_log.txt"
$Count_Log = _FileCountLines($Path)

While 1
    $Array = _FileReadToArray($Path, $Index, 0)

    $Recount_Log = UBound($Index) - 1

    If $Recount_Log > $Count_Log Then ToolTip($Index[UBound($Index) - 1], 0, 0)
    ;If $Recount_Log > $Count_Log Then MsgBox(0, '' , $Index[UBound($Index) - 1])

    $Recount_Log = $Count_Log
    Sleep(250)
WEnd

So far this works great! Thank you!

Edited by Fade91
Link to post
Share on other sites

If you need to do this on a log of any decent size, or if you really only want the last line:  you may want to consider filereadline($log , -1), as checking that one string will be much less of a penalty than the readtoarray and ubound check.  

 

Edited by boththose

,-. .--. ________ .-. .-. ,---. ,-. .-. .-. .-.
|(| / /\ \ |\ /| |__ __||| | | || .-' | |/ / \ \_/ )/
(_) / /__\ \ |(\ / | )| | | `-' | | `-. | | / __ \ (_)
| | | __ | (_)\/ | (_) | | .-. | | .-' | | \ |__| ) (
| | | | |)| | \ / | | | | | |)| | `--. | |) \ | |
`-' |_| (_) | |\/| | `-' /( (_)/( __.' |((_)-' /(_|
'-' '-' (__) (__) (_) (__)

Link to post
Share on other sites

The file is written continuously and my script will perform actions on the most recent action it logs. Which means it will have to pause the script and continue on from where it left off afterwards. So reading just the last line wouldn't work all that well but may be if I were to get the line number and store it and continue on from there, that might just work.

Basically the script is taking this log information and projecting it on my monitor in the form of a GUI and when different toggles are on/off, it shows the user (me)

I'm not sure how well this is going to work out though because once it reads the last piece of the log it has to decode it and show it in the GUI and continue from where it left off, which is no big deal but the GUI is suppose to be active while its looping through the logs. So it's like I almost need two scripts communicating back and forth or something.

It seems like quite the project to be taking on but once I get the reading of the log finalized the GUI part is easier but its getting them to work at the same time that is going to be a bit challenging for me.

Link to post
Share on other sites

Sure, but it would still be a quicker first test in the current loop, because if that string matches then you could just sleep and check again.  and if it doesnt match then you can read the file to array without a need to test the ubound, and in the gui display all the lines between $Recount_log and ubound($array)  - 1. 

,-. .--. ________ .-. .-. ,---. ,-. .-. .-. .-.
|(| / /\ \ |\ /| |__ __||| | | || .-' | |/ / \ \_/ )/
(_) / /__\ \ |(\ / | )| | | `-' | | `-. | | / __ \ (_)
| | | __ | (_)\/ | (_) | | .-. | | .-' | | \ |__| ) (
| | | | |)| | \ / | | | | | |)| | `--. | |) \ | |
`-' |_| (_) | |\/| | `-' /( (_)/( __.' |((_)-' /(_|
'-' '-' (__) (__) (_) (__)

Link to post
Share on other sites

Fade91,

The following is an example of how to return the unread portion of a file from scan to scan...

; *** Start added by AutoIt3Wrapper ***
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
; *** End added by AutoIt3Wrapper ***

#include <array.au3>
#include <date.au3>
#include <File.au3>

Local $file_monitored   = @ScriptDir & '\log.log' ; file to monitor
Local $monitor_interval = .25 ; minute(s) between file check
Local $bMonitor         = False ;   switch to start monitor

#AutoIt3Wrapper_Add_Constants=n

Local $gui010 = GUICreate('Log Monitor')
Local $aSize  = WinGetClientSize($gui010)
Local $lbl010 = GUICtrlCreateLabel('Log', 10, 10, 50, 20)
Local $log010 = GUICtrlCreateEdit('', 10, 30, $aSize[0] - 20, $aSize[0] - 50, $es_readonly)
GUICtrlSetFont($log010, 7, 800, -1, 'lucinda console')
GUISetState()

; routine to start scan
AdlibRegister('_start_monitor', $monitor_interval * 60 * 1000)

While 1

    Switch GUIGetMsg()
        Case $gui_event_close
            Exit
    EndSwitch



    If $bMonitor = True Then
        _scan_file()
        $bMonitor = False
    EndIf



WEnd



; scan routine
Func _scan_file()

    Local $sTMP = ''
    Local Static $FilePos = 0

    ;read log file entries added since the last scan
    Local $fl = FileOpen($file_monitored)
    If $fl = -1 Then Exit MsgBox($MB_ICONERROR, '', 'File open failed')

    ; set file position to last position read
    If Not FileSetPos($fl, $FilePos, 0) Then _
            Exit MsgBox(0, 'ERROR', 'FileSetPos failed')

    ; read file from last position read to the end
    Local $sLogEntries = FileRead($fl)

    ; save file position for the next loop
    $FilePos = FileGetPos($fl)
    FileClose($fl)

    ; do whatever you want with the log entries...I am just writing them to the gui



    GUICtrlSetData($log010, 'Log Scan at ' & _Now() & @CRLF & $sLogEntries, 1)
    If StringRight(GUICtrlRead($log010), 2) <> @CRLF Then GUICtrlSetData($log010, @CRLF, 1)

EndFunc   ;==>_scan_file

; adlib to set switch that initiates scan
Func _start_monitor()
    $bMonitor = True
EndFunc   ;==>_start_monitor

Note - 1) If lines are deleted and subsequently populated that range will not be returned, although this could be coded for.

           2) The file position is only valid while the script is running.  You can probably externalize this value, if needed.

Cursory comments are included, please ask if you have questions.

kylomas

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 post
Share on other sites
#include <File.au3>
#include <Array.au3>
#include <MsgBoxConstants.au3>

$Path = "output_log.txt"
$Count_Log = _FileCountLines($Path)

$Handle = FileOpen($Path)

While 1
    $Recount_Log = _FileCountLines($Path)
    If $Recount_Log > $Count_Log Then
        ConsoleWrite(FileReadLine($Path, _FileCountLines($Path))) ; last written log
        ; Do Stuff

_String(FileReadLine($Path, _FileCountLines($Path)))

    EndIf
    ;;; Probably won't use
    $Count_Log = $Recount_Log ; Would update to the very last written log
    ;;; Probably won't use
    ToolTip($Count_Log & @CRLF & $Recount_Log, 0, 0) ; log count compare (test only)
WEnd
FileClose($Handle)

 

 Now I need to somehow count where I left off and do something based on whats actually written and repeat this till I catch up to the 'last count'.

I was thinking something like...

_String(FileReadLine($Path, _FileCountLines($Path)))

and have the function figure out what to do with the info

Now with the useful information of the log im thinking about may be writing it to a seperate log or ini file and having the GUI as a seperate script and having it read the log/ini to show the needed information

The reason for this is to simply increase the speed of both scripts.

 

I think im quite happy may be going this route. I think it might work :)

Edited by Fade91
Link to post
Share on other sites

_String(FileReadLine($Path, _FileCountLines($Path)))

No, just use FileRead for the first time and store the byte size read off the file, which is set in @extended. Next runs, use FileSetPos to start reading up from the start of newly written data, then FileRead up to EOF. Of course this requires that nothing truncates the file in between, i.e. that the logger always appends data.

This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.
Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe here
RegExp tutorial: enough to get started
PCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta.

SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.
SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.
An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.
SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)
A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!
SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt)

Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By t0nZ
      About logs, it is a few years that I drag a couple of functions between one script and another, so finally I decided to write down my first UDF to optimize my scripts.
      Main focus is to keep it simple, so you have just to include _gollog.au3 and call:
      GOLLOG("a line of text"), and start logging.
      If your script is without GUI the log will be only written to disk, if you have a GUI you can initialize an edit control :
      GOLLOG_INI($guititle, $left, $top, $width, $height)
      and GOLLOG() will write your log both in an auto generated EDIT control in your $guititle GUI and disk; also GOLLOG_INI() will AUTO-create a GUI (if it doesn't exist $guititle) with a screen log if you want !
      The majority of options (colors, fonts, position of logs ) are default-defined, but you can initialize them with GOLLOG_INI(), is all documented in the UDF and partially in the example.
      There is also a function:
      GOLzipLOG($n)
      to ZIP logs older than $n months, based on the UDF (also included in attachments) _zip.udf by @wraithdu
      the UDF code:
      #include-once #include <File.au3> #include <_zip.au3> ; #INDEX# ======================================================================================================================= ; Title .........: GOLLOG ; AutoIt Version : 3.3.14.0++ ; Language ......: English ; Description ...: Smart logging system ; Author(s) .....: NSC ; Last revision..: 20210409 ; =============================================================================================================================== ; ------------------------------------------------------------------------------ ; This software is provided 'as-is', without any express or ; implied warranty. In no event will the authors be held liable for any ; damages arising from the use of this software. ; #VARIABLES# =================================================================================================================== ; internal use Global $gollogcount = 0 ;total number of chars in editbox Global $lastlog = "sicrlf" ;carriage return default yes "sicrlf" or no onetime "nocrlf", see func GOLLOG Global $cachelog = "" ;to count number of chars on single line Global $Gollogedit = "" ;name of edit control ; to initialize with func _GOLLOG_INI Global $guititle = "" ;name of gui for checkin' if activate on screen loggin' Global $geleft = 0 ;left coord edit box Global $getop = 0 ;top coord edit box Global $gewidth = 0 ;width of edit box Global $geheight = 0 ;height of edit box ; optionally to initialize with func _GOLLOG_INI, otherwise default values used Global $GEfontcolor = "0x00FF00" Global $GEbkcolor = "0x000000" Global $GEfont = "consolas" Global $GEfontsize = 8 Global $gefontweight = 800 Global $logpath = @ScriptDir & "\logs" Global $logfile = $logpath & "\" & StringTrimRight(@ScriptName, 4) & "_LOG_" ; =============================================================================================================================== ; #CURRENT# ===================================================================================================================== ; GOLLOG_INI ; GOLLOG ; GOLzipLOG ; =============================================================================================================================== ; #INTERNAL_USE_ONLY#============================================================================================================ ; cleanedit ; =============================================================================================================================== #comments-start Changelog: ; V.2.31 2014-2015-2016-2018 only functions up to this version ; V.3.00 2018/07/30 first attempt to convert to UDF ; V.3.02 2018/08/03 bugfix in log folder creation ; V.3.03 2021/04/08 removed a undeclared variabile, caused a warning... $test = guicreate... ideas to do don't repeat timestamps, at least on GUI , or highlight only time changes in line option to display also as balloon text one or more lines in line option to write only on screen and not on disk in line option to change font size / color only on one line #comments-end ; #FUNCTION# ==================================================================================================================== ; Name...........: GOLLOG_INI ; Description ...: Initialize variables for GOLLOG edit, and creates the GOLLOG EDIT BOX ; if the Gui window is not existant ($guititle) also creates the windows gui; in this case, the parameters of ; coords and dimensions are used for the new gui window, but are coords and dimensions are inverted ; due to different parameters order in GUICreate and GUICtrlCreateEdit ; if not called gollog only write to disk with default setting (because $guititle = "") ; if called with &guititle = "", the edit box related variables are ignored but you can still define values for the log file ; Syntax.........: GOLLOG_INI ($guititle, $geleft, $getop, $gewidth, $geheight[, $gefontcolor [, $gebkcolor [, $gefont [, $gefontsize [, $gefontweight [, $logfile ]]]]] ) ; Parameters ....: $guititle - name of gui ; $geleft - left coord of the edit (for windows gui: width) ; $getop - top coord of the edit (for windows gui: height) ; $gewidth - width of the edit (for windows gui: left coord) ; $geheight - height of the edit (for windows gui: top coord) ; $gefontcolor - optional color of font in edit control ; $gebkcolor - optional color of background of edit control ; $gefont - optional font type ; $gefontsize - optional size of font ; $gefontweight - optional weight of font ; $logfile - optional complete path\name of the logfile (datetime will be still added to the name) ; otherwise default path\name will be used ; Return values .: Success - Returns "OK" ; Failure - error message, sets @error = 1 ; set @extended ; |1 - left cooord missing ; |2 - top coord missing ; |3 - widht missing ; |4 - height missing ; Author ........: NSC ; Modified.......: ; Remarks .......: ; Related .......: GOLLOG ; Link ..........: ; Example .......: No ; =============================================================================================================================== Func GOLLOG_INI($Fguititle, $Fgeleft, $Fgetop, $Fgewidth, $Fgeheight, $FGEfontcolor = "0x00FF00", $FGEbkcolor = "0x000000", $FGEfont = "consolas", $FGEfontsize = 8, $Fgefontweight = 800, $Flogfile = @ScriptDir & "\logs\" & StringTrimRight(@ScriptName, 4) & "_LOG_") $guititle = $Fguititle $geleft = $Fgeleft $getop = $Fgetop $gewidth = $Fgewidth $geheight = $Fgeheight ; optionally to initialize with func _GOLLOG_INI, otherwise default values used $GEfontcolor = $FGEfontcolor $GEbkcolor = $FGEbkcolor $GEfont = $FGEfont $GEfontsize = $FGEfontsize $gefontweight = $Fgefontweight $logfile = $Flogfile If $guititle = "" Then Return "paramter GUI title missing" EndIf If $geleft = "" Then Return SetError(1, 1, "edit: left cooord missing") If $getop = "" Then Return SetError(1, 2, "edit: top coord missing") If $gewidth = "" Then Return SetError(1, 3, "edit: widht missing") If $geheight = "" Then Return SetError(1, 4, "edit: height missing") If Not WinExists($guititle) Then If $geleft = "" Then Return SetError(1, 1, "GUI: width missing") If $getop = "" Then Return SetError(1, 2, "GUI: heigh missing") If $gewidth = "" Then Return SetError(1, 3, "GUI: left cooord missing") If $geheight = "" Then Return SetError(1, 4, "GUI: top coord missing") GUICreate($guititle, $geleft, $getop, $gewidth, $geheight) ; removed $test = ; modify parameters to fit edit in "auto" generated GUI $gewidth = $geleft - 10 $geheight = $getop - 10 $getop = 5 $geleft = 5 cleanedit() GUISetState(@SW_SHOW) Else If $geleft = "" Then Return SetError(1, 1, "left cooord missing") If $getop = "" Then Return SetError(1, 2, "top coord missing") If $gewidth = "" Then Return SetError(1, 3, "widht missing") If $geheight = "" Then Return SetError(1, 4, "height missing") cleanedit() EndIf Return "OK" EndFunc ;==>GOLLOG_INI ; #FUNCTION# ==================================================================================================================== ; Name...........: GOLLOG ; Description ...: writes one line of log ; if there isn't edit control, the line is only written on the log file ; if there is also an associated edit control, it writes both on screen and on file ; Syntax.........: GOLLOG(ByRef $logtext) ; Parameters ....: $logtext - a string of text to be written down on disk and on screen ; if $logtext containg at the end a substring like "|nocrlf50" that line does not CR ("noCRLF") ; except if the max specified number of chars on the line ("50") is excedeed ; next call of Gollog() without substring "|nocrlf50" restores auto Carriage Return behaviour ; Return values .: n/a ; Author ........: NSC ; Modified.......: ; Remarks .......: ; Related .......: GOLLOG_INI,cleanedit ; Link ..........: ; Example .......: no ; =============================================================================================================================== Func GOLLOG($logtext) If Not FileExists($logpath) Then DirCreate($logpath) ; pre-UDF this was in the scripts EndIf $gollogcount += StringLen($logtext) Local $logfiletimerange = @YEAR & @MON Local $linelimit = StringRight($logtext, 2) If StringRight($logtext, 9) = "|nocrlf" & $linelimit Then $logtext = StringTrimRight($logtext, 9) Local $acapo = "no" Else Local $acapo = "si" $gollogcount += 4 If $gollogcount > 13000 And $guititle <> "" Then ;Sleep(3000) cleanedit() ; MsgBox(64, "debug", $conta) $gollogcount = 0 EndIf EndIf If $acapo = "no" And (StringLen($cachelog) <= $linelimit) Then ;pearl perla no CRLF if > linelimt If $lastlog = "nocrlf" Then If WinExists($guititle) Then ; no GUI no on screen log GUICtrlSetData($Gollogedit, $logtext, 1) EndIf Else If WinExists($guititle) Then ; no GUI no on screen log GUICtrlSetData($Gollogedit, @MDAY & "/" & @MON & "_" & @HOUR & ":" & @MIN & " " & $logtext, 1) EndIf EndIf $cachelog = $cachelog & $logtext $lastlog = "nocrlf" Else If $lastlog = "nocrlf" Then If WinExists($guititle) Then ; no GUI no on screen log GUICtrlSetData($Gollogedit, $logtext & @CRLF, 1) EndIf $cachelog = $cachelog & $logtext _FileWriteLog($logfile & $logfiletimerange & ".txt", $cachelog) $cachelog = "" Else If WinExists($guititle) Then ; no GUI no on screen log GUICtrlSetData($Gollogedit, @MDAY & "/" & @MON & "_" & @HOUR & ":" & @MIN & " " & $logtext & @CRLF, 1) EndIf _FileWriteLog($logfile & $logfiletimerange & ".txt", $logtext) EndIf $lastlog = "sicrlf" EndIf EndFunc ;==>GOLLOG ; #FUNCTION# ==================================================================================================================== ; Name...........: GOLzipLOG ; Description ...: takes all log files older than specified number of months, and zip these in a unique zip file, in the same folder ; Syntax.........: GOLLOG(ByRef $months2notZIP) ; Parameters ....: $months2notZIP - number of months (age of log files) to not zip ; Return values .: n/a ; Author ........: NSC ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........: ; Example .......: no ; =============================================================================================================================== Func GOLzipLOG($months2NOTzip) ; zipping old log leaving unzipped only n months GOLLOG("ZIPping log files older than " & $months2NOTzip & " months") Local $hSearch = FileFindFirstFile($logfile & "*.txt") ; searching for logs Local $logconta = 0 Local $logfiletimerange = @YEAR & @MON While 1 ; single file processing cycle Local $sFileName = FileFindNextFile($hSearch) ; If there is no more file matching the search. If @error Then ExitLoop Local $stringtime = StringTrimRight(StringRight($sFileName, 10), 4) ;obtaining year-month like 201609 If $logfiletimerange - $stringtime > $months2NOTzip Then ;zipping If Not FileExists($logfile & ".zip") Then If Not _Zip_Create($logfile & ".zip", 1) Then GOLLOG("Error " & @error & " creating " & $logfile & ".zip") Else GOLLOG("Created new log archive: " & $logfile & ".zip") EndIf Else GOLLOG("adding to archive: " & $logfile & ".zip") EndIf If Not _zip_additem($logfile & ".zip", $logpath & $sFileName) Then GOLLOG("Error " & @error & " zipping: " & $logpath & $sFileName) Else GOLLOG("Added: " & $logpath & $sFileName) $logconta += 1 If Not FileDelete($logpath & $sFileName) Then GOLLOG("ERROR - Unable to DELETE log file " & $logpath & $sFileName) EndIf EndIf EndIf WEnd GOLLOG("Finished = " & $logconta & " log files zipped") EndFunc ;==>GOLzipLOG ; #INTERNAL_USE_ONLY#============================================================================================================ ; Name...........: cleanedit ; Description ...: create the edit box delete edit box and recreate it with same parameters ; when the edit box is "full" of chars delete edit box and recreate it with same parameters ; parameters are global variables specified in GOLLOG_INI ; Syntax.........: cleanedit() ; Parameters ....: n/a ; Return values .: n/a ; Author ........: NSC ; Modified.......: ; Remarks .......: ; Related .......: GOLLOG_INI ; Link ..........: ; Example .......: no ; =============================================================================================================================== Func cleanedit() ; cleaning of edit every n° lines (in program put if $nlines > xlines then this function) GUICtrlDelete($Gollogedit) $Gollogedit = GUICtrlCreateEdit("", $geleft, $getop, $gewidth, $geheight) ;, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_WANTRETURN, $WS_BORDER)) GUICtrlSetData(-1, "" & @CRLF) GUICtrlSetFont(-1, $GEfontsize, $gefontweight, 0, $GEfont) GUICtrlSetColor(-1, $GEfontcolor) GUICtrlSetBkColor(-1, $GEbkcolor) GUICtrlSetCursor(-1, 3) EndFunc ;==>cleanedit the example code:
      ; *** GOLLOG UDF test script *** ; (C) NSC 2018 #include <_GOLLOG.au3> MsgBox(64,"GOLLOG example 1","no GUI, only write on disk, check the log file in @scriptdir" & @CR & "note: no initialization GOLLOG_INI() is required!") Gollog("this is the first line of log only in the file") MsgBox(64,"GOLLOG example 2","log and edit on pre-existant GUI") $mygui = "edit on existant gui" Guicreate($mygui, 600,300,300,300) GUISetState(@SW_SHOW) gollog_ini($mygui,5,5,590,290) ;basic initialization, no aestetic options Gollog("this is the first line |nocrlf50") ; no carriage return with -> |nocrlf50 Gollog("on the pre-existant GUI") ; auto CR restored $a = 0 while $a < 50 GOLLOG("Example 2 line:" & $a) $a +=1 sleep(100) wend GUIDelete($mygui) MsgBox(64,"GOLLOG example 3","log and edit on 'auto' generated GUI") $mygui = "auto generated GUI" gollog_ini($mygui,600,300,200,200,"0x0033cc","0xffff00","courier") ; initialization with colors and font choice, more options see the UDF Gollog("this is the first line |nocrlf50") Gollog("on the 'auto' generated GUI") $a = 0 while $a < 50 GOLLOG("Example 3 line:" & $a) $a +=1 sleep(100) wend MsgBox(64,"GOLLOG example 4","auto re-creation of edit") ; recreate edit before it is "full" Gollog("to recreation of edit control") while $a < 1500 GOLLOG("Example 4 line:" & $a) $a +=1 wend  
      Some options are a bit weird, because I kept retro-compatibility with all my scripts, removing functions and adding the UDF...
      Greetings to all of you.
       
       
      GOLLOG_UDF_TEST.au3
       
       
      _GOLLOG.au3 _Zip.au3
    • By MarkBuchanan
      Hello,

      I am new to AutoIt so please bare with me. I am trying to write a script that installs a certain program on Win 10 and then based on a successful install create a file in a specific directory. Below is my install script which works, just not quite sure how to get it to write the file when its done. My thought is to add a "If FileExists" command at the end to make sure that the files are in the install folder and based on that write the file just not sure how to accomplish it. I hope that makes sense and thank you in advance for any help. 
       
      Local $Title="MobilePass Install"
      Local $FilePATH="\\XXXXXXX\XXXXXX"
      Local $UserName "*****8"
      Local $Password = "*******8"   ;Check if Application location already exists
      If FileExists ("C:\Program Files\WindowsApps\05EB1CFA.SafeNetMobilePASS_1.8.3.0_x64__bnm8hg3x9na9j") Then
      Exit
      Else
      Local $pid = RunAsWait ($UserName, $ComputerDomainName, $Password, 1, "MobilePASS+Setup_1.8.3.0_signed.exe", "", @SW_HIDE )
      Endif
       
    • By Colduction
      Hi again guys!, i had COVID-19 for twice and i couldn't check the forum since 3 or 4 months ago till now! i hope you will get better if you're fighting for beat COVID-19

      I have two question, first is about extracting all of the IP Address from an IP Ranges, for e.g: 192.168.1.1-192.255.255.255 (Start and End are variable and will be defined by the user) and for second one, i have a friend that he is Python programmer, he made a IP Parser that it can support large txt files (1TB) and it can parse all of them under 10min and it also supports low-end PCs that have 1 GB RAM!

      The list that his program parses are:
      #1765497 192.168.1.1 8082 #1765496 192.168.1.1 8084 #1965493 192.168.1.1 8089 #9565495 192.168.1.1 8086 #2565492 192.168.1.1 8081 and it converts very very fast to this:
      192.168.1.1:8082 192.168.1.1:8084 192.168.1.1:8089 192.168.1.1:8086 192.168.1.1:8081 I wonder how to do this via AutoIt, if you can help me in this way, i will be happy✌❤

      Thanks for your helps.

      FIRST_QUESTION_TEST.au3
    • By Alok_Arora
      Hello Sir, 
      While searching for the solution to my problem, I have just gone through some of your old post. 
      My name is Alok Arora 
      Email id is *snip*
      I am writing a code to store logs for each script I run. This I did by using FileWriteLog function and it is successfully storing logs in txt file. 
      Now, I have to work on to read the log file and if any script has been mistakenly clicked twice in a day script will pop up a message that task already done for the day by verifying entries in the log file. 
      I have the logic for it.. 
      I mean a variable will read the log file and will search for the entry and will perform action if entry found or not. 
      I believe for reading the file I can write a code like
      $i =fileread("logfile.txt")
      Now I am stuck on how to compare the log entry in log file. 
      Can you please help me in this? 
    • By TheDcoder
      See this thread for info:
×
×
  • Create New...