Solved

Search for a log based on date

Posted on 2008-10-13
14
166 Views
Last Modified: 2012-05-05
I need to search for a log based on the date and then look for a pattern within that log. For example on Oct 13th, I need to look for:
log.2008-10-13

How can i do that in vbscript?
0
Comment
Question by:rheasam
  • 6
  • 4
  • 4
14 Comments
 
LVL 65

Accepted Solution

by:
RobSampson earned 250 total points
Comment Utility
Hi, something like this might do the job....

Regards,

Rob.
strFolder = "C:\Logs"

Set objFSO = CreateObject("Scripting.FileSystemObject")

strYear = Year(Date)

strMonth = Right("0" & Month(Date), 2)

strDay = Right("0" & Day(Date), 2)

strLogName = "log." & strYear & "-" & strMonth & "-" & strDay

strFoundFile = ""

For Each objFile In objFSO.GetFolder(strFolder).Files

	If LCase(objFile.Name) = LCase(strLogName) Then strFoundFile = objFile.Path

Next

If strFoundFile = "" Then

	MsgBox strLogName & " was not found in " & strFolder

Else

	MsgBox "Found " & strFoundFile

End If

Open in new window

0
 
LVL 45

Assisted Solution

by:aikimark
aikimark earned 250 total points
Comment Utility
* There's probably a more direct way of doing this using FileExists. see snippet
* What pattern do you need to find inside the log file?
strFolder = "C:\Logs\"

Set objFSO = CreateObject("Scripting.FileSystemObject")

strLogName = "log." & Format(Now, "yyyy-mm-dd")

If objFSO.FileExists(strFolder & strLogName) Then

   MsgBox "Found " & strFolder & strLogName

   '? look for pattern in the file ?

Else

   MsgBox strLogName & " was not found in " & strFolder

End If

 

Open in new window

0
 
LVL 65

Expert Comment

by:RobSampson
Comment Utility
>> There's probably a more direct way of doing this using FileExists

Oh, of course.....brain fart moment.....  :-(

That's true aikimark, but the Format method does not exist in VBScript....

Rob.
strFolder = "C:\Logs"

Set objFSO = CreateObject("Scripting.FileSystemObject")

strYear = Year(Date)

strMonth = Right("0" & Month(Date), 2)

strDay = Right("0" & Day(Date), 2)

strLogName = "log." & strYear & "-" & strMonth & "-" & strDay

If objFSO.FileExists(strLogName) Then

	MsgBox strLogName & " was not found in " & strFolder

Else

	MsgBox "Found " & strLogName

End If

Open in new window

0
 
LVL 45

Expert Comment

by:aikimark
Comment Utility
I, too, forgot about the watered-down nature of the VBScript run time environment.  (no Format function)
0
 

Author Comment

by:rheasam
Comment Utility
Ok, thanks I am checking on these and will let you know.
0
 
LVL 45

Expert Comment

by:aikimark
Comment Utility
There are a few work-arounds for VBScript folks who find they need to use the Format() function often.  The simplest is to use VB-classic to create an ActiveX DLL that returns the result of the VB Format() function.  Then it is a simple matter of instantiating a variable of that type and use its one and only  method.
0
 
LVL 65

Expert Comment

by:RobSampson
Comment Utility
Or you can write your own formatting function in code, something like the below....

It's obviously not very "smart", but it could be made to output in multiple formats....

Regards,

Rob.
MsgBox TimeNow(Now)
 

strDate = Left(TimeNow(Now), 4) & Mid(TimeNow(Now), 9, 2) & Mid(TimeNow(Now), 6, 2)
 

MsgBox strDate
 

Function TimeNow(dDateTime)

	TimeNow =	Year(Now) & "-" &_

				Right("00" & Month(Now), 2) & "-" &_

				Right("00" & Day(Now), 2) & "-" &_

				Right("00" & Hour(Now), 2) & "-" &_

				Right("00" & Minute(Now), 2) & "-" &_

				Right("00" & Second(Now), 2)

End Function

Open in new window

0
Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

 

Author Comment

by:rheasam
Comment Utility
Can you give me the code to look for the particular pattern, the above seems to just check whether the log with date is present.
0
 
LVL 45

Expert Comment

by:aikimark
Comment Utility
You could construct a pattern matching string to use with the LIKE operator
For Each objFile In objFSO.GetFolder(strFolder).Files

 If LCase(objFile.Name) Like "Log.2008-10-13*" Then strFoundFile = objFile.Path

Next

Open in new window

0
 

Author Comment

by:rheasam
Comment Utility
No what I meant is to look for a pattern within the file. So for example I found the file
Log.2008-10-13. Now I need to look for badfetch string within that file:

ex:
0
 
LVL 45

Expert Comment

by:aikimark
Comment Utility
@rheasam

You haven't given us any information about the contents or size or format of the file.  I could give you an answer, but I'd rather give you a good answer.
0
 

Author Comment

by:rheasam
Comment Utility
The file is a text file and will always have some content. The lines could like the following


Could not read the file: badfetch error  12:25 13 Oct 2008
Could not retrieve the audio:badtfetch error 12:26 13 Oct 2008


Whenever the badfetch comes I want to print the line and send it as a alert. I will generate a email with that text.
0
 
LVL 45

Expert Comment

by:aikimark
Comment Utility

Dim strLine As String

Open "filename" For Input As #1

Open "alertfilename" For Output As #2

Do Until EOF(#1)

  Line Input #1, strLine

  If strLine Like "*badfetch*" Then

    Print #2, strLine

  End If

Loop

Close

Open in new window

0
 
LVL 65

Expert Comment

by:RobSampson
Comment Utility
The above is VBA code, try this for VBScript.

Regards,

Rob.
strFolder = "C:\Logs"

Set objFSO = CreateObject("Scripting.FileSystemObject")

Const intForReading = 1

strYear = Year(Date)

strMonth = Right("0" & Month(Date), 2)

strDay = Right("0" & Day(Date), 2)

strLogName = "log." & strYear & "-" & strMonth & "-" & strDay

If objFSO.FileExists(strLogName) Then

	MsgBox strLogName & " was not found in " & strFolder

Else

	MsgBox "Found " & strLogName

	Set objFile = objFSO.OpenTextFile(strLogName, intForReading, False)

	While Not objFile.AtEndOfStream

		strLine objFile.ReadLine

		If InStr(strLine, "badfetch") > 0 Then

			WScript.Echo strLine

		End If

	Wend

	objFile.Close

	Set objFile = Nothing

End If

MsgBox "Script has finished."

Open in new window

0

Featured Post

Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

Join & Write a Comment

When trying to find the cause of a problem in VBA or VB6 it's often valuable to know what procedures were executed prior to the error. You can use the Call Stack for that but it is often inadequate because it may show procedures you aren't intereste…
If you have ever used Microsoft Word then you know that it has a good spell checker and it may have occurred to you that the ability to check spelling might be a nice piece of functionality to add to certain applications of yours. Well the code that…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…

763 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now