pbecks1963 Posted April 16, 2010 Posted April 16, 2010 Hello Y'all, I have these logfiles that are named after the pc or the user that produced it. (for instance: John.log or PC123.log) I need to make a script that will search through the olders containing these files and find the file called $searchname and display the last line of this textfile. So if i search for "John" it will find "John.log" and display the last line. How do i do this?
99ojo Posted April 16, 2010 Posted April 16, 2010 Hi, the code is working, if your log file exists only once in your folder structure. expandcollapse popup;Startfolder $folder = "c:\autoit" ;Name to search for, e.g. john $search = InputBox ("Searching for", "Name to search for: ") ;Recursiv search in $startfolder for $search.log files, return array with full path $arfiles = _GetFilesFolder_Rekursiv ($folder, $search & ".log", 0) If $arfiles [0] = 1 Then MsgBox (0, "Last Line of " & $arfiles [1], FileReadLine ($arfiles [1], -1)) Else MsgBox (0, "Log File for " & $search , "not found") EndIf ;================================================================================================== ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]]) ; Description: recursive listing of files and/or folders ; Parameter(s): $sPath Basicpath of listing ('.' -current path, '..' -parent path) ; $sExt Extension for file selection '*' or -1 for all (Default) ; $iDir -1 Files+Folder(Default), 0 only Files, 1 only Folder ; optional: $iRetType 0 for Array, 1 for String as Return ; optional: $sDelim Delimiter for string return ; 0 -@CRLF (Default) 1 -@CR 2 -@LF 3 -';' 4 -'|' ; Return Value(s): Array (Default) or string with found pathes of files and/or folder ; Array[0] includes count of found files/folder ; Author(s): BugFix (bugfix@autoit.de) ;================================================================================================== Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0, $sDelim='0') Global $oFSO = ObjCreate('Scripting.FileSystemObject') Global $strFiles = '' Switch $sDelim Case '1' $sDelim = @CR Case '2' $sDelim = @LF Case '3' $sDelim = ';' Case '4' $sDelim = '|' Case Else $sDelim = @CRLF EndSwitch If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0 If $sExt = -1 Then $sExt = '*' If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1 _ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir,$sDelim) If $iRetType = 0 Then Local $aOut $aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1) If $aOut[1] = '' Then ReDim $aOut[1] $aOut[0] = 0 EndIf Return $aOut Else Return StringTrimRight($strFiles, StringLen($sDelim)) EndIf EndFunc Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1, $Delim=@CRLF) If StringLen ($Folder.Path) > 250 Then $Folder = "\\?\" & $Folder If Not IsDeclared("strFiles") Then Global $strFiles = '' If ($Dir = -1) Or ($Dir = 0) Then For $file In $Folder.Files If $Ext <> '*' Then If StringRight($file.Name, StringLen($Ext)) = $Ext Then _ $strFiles &= $file.Path & $Delim Else $strFiles &= $file.Path & $Delim EndIf Next EndIf For $Subfolder In $Folder.SubFolders If ($Dir = -1) Or ($Dir = 1) Then If StringInStr ($Subfolder, "\\?\") Then $strFiles &= StringTrimLeft ($Subfolder.Path, 4) & '\' & $Delim Else $strFiles &= $Subfolder.Path & '\' & $Delim EndIf EndIf _ShowSubFolders($Subfolder, $Ext, $Dir, $Delim) Next EndFunc ;-)) Stefan
pbecks1963 Posted April 16, 2010 Author Posted April 16, 2010 (edited) Thanks man! works great for the pc log's but unfortunetly the user log's have different names. for instance: ".pbe.Beheer.MBO.NijmegenM.Helicon ( test user).log" I would like to search for the user "pbe" (in this case) without having to know the rest of the search string (see below) ".Beheer.MBO.NijmegenM.Helicon ( test user).log" So: what i am looking for is a text-file that starts with <dot>USERNAME<dot> What do i change in the file? Edited April 16, 2010 by pbecks1963
99ojo Posted April 16, 2010 Posted April 16, 2010 Hi, then try this (changes are only in main part): #include <array.au3> ;Startfolder $folder = "c:\autoit" ;Name to search for, e.g. john $search = InputBox ("Searching for", "Name to search for: ") ;Recursiv search for all log files, return array with full path $arfiles = _GetFilesFolder_Rekursiv ($folder, "log", 0) $index = _ArraySearch ($arfiles, $search, 0, 0, 0, 1) If $index <> - 1 Then MsgBox (0, "Last Line of " & $arfiles [$index], FileReadLine ($arfiles [$index], -1)) Else MsgBox (0, "Log File for " & $search , "not found") EndIf
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