Thursday, March 5, 2009

Splitting Log files

Here's how you can split any file into as many multiple parts as you need. This is good for when you need to read very large log files on windows machines.

Option Explicit

'variables for the text files
Dim sourcefile,target1,targetDir,basename,targetfile,strfilenum,filenumber,linenumber

'variables objects
Dim objfs, isnotsplit, WorkingFolder

'initialize arguments
Set objfs = CreateObject("Scripting.FileSystemObject")
Set WorkingFolder = objfs.GetFolder(".\")
sourcefile = WorkingFolder & "\source.txt"
basename = "splitlog"
targetDir = WorkingFolder & "\newfiles\"
filenumber = 1
linenumber = 1
' check the file exists
If objFS.FileExists( sourceFile ) Then
WScript.Echo ("input file exists...")
strfilenum = "" & filenumber & ""
targetfile = targetDir + "\" + basename + "_" + strfilenum + "." + objFS.GetExtensionName(sourceFile)
Set target1 = objFS.CreateTextFile(targetfile, True)
WScript.Echo "Creating file " & filenumber & "."

With objfs.OpenTextFile(sourceFile)

While Not .AtEndOfStream
' new files
If linenumber <>
target1.WriteLine .ReadLine
linenumber = linenumber + 1
Else
target1.WriteLine .ReadLine
target1.close
filenumber = filenumber + 1
strfilenum = "" & filenumber & ""
targetfile = targetDir + "\" + basename + "_" + strfilenum + "." + objFS.GetExtensionName(sourceFile)
Set target1 = objFS.CreateTextFile(targetfile, True)
linenumber = 1
WScript.Echo "Creating file " & filenumber & "."
End If
Wend
.Close
End With
target1.Close
If( strfilenum = 1 ) Then
WScript.Echo ("input file not split(Too Small)...")
else
WScript.Echo ("input file split...")
End If
Else
WScript.Echo ("input file does not exist...")
End if
WScript.Echo ("finished!")
'end

No matter how many resulting parts you need, this script will work. every 60,000 lines it just starts a new file with a new file name. I used this to split a log with over 1.2million lines.(180 meg txt file.)