This script will allow you to browse to a text document and compare all of the words that exist in another dictionary text file.
If any matches are found an html report is created showing the matches and highlighting the matches in the scanned file.
An example of the report can be found here.
The dictionary text file must contain a list of words, with each word being on a new line also the dictionary.txt file must in the same directory as the script
' ---------------------------------------------------------------------------------
' Word Compare
'
' Version: 0.2
' Author: Philip Eddies
'
' Disclainer:
' Use of this script / software is entirely at your own risk no support, warranty
' or guaranty is given. The author takes no responsibility for any damage or problems
' caused by this script / software.
'
' Copyright 2009 Philip Eddies
'
' Licensed under GPL
' This program is free software: you can redistribute it and/or modify
' it under the terms of the GNU General Public License as published by
' the Free Software Foundation, either version 3 of the License, or
' (at your option) any later version.'
'
' This program is distributed in the hope that it will be useful,
' but WITHOUT ANY WARRANTY; without even the implied warranty of
' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
' GNU General Public License for more details.'
'
' You should have received a copy of the GNU General Public License
' along with this program. If not, see <http://www.gnu.org/licenses/>.
'
' ---------------------------------------------------------------------------------
'Values for objFSO
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
Set objCD = CreateObject("UserAccounts.CommonDialog")
Set objFSO = Createobject("Scripting.FileSystemObject")
Set objShell = CreateObject("WScript.Shell")
'Get the path to the script
ScriptName = Wscript.ScriptName
ScriptFullName = Wscript.ScriptFullName
ScriptPath = replace(ScriptFullName, ScriptName, "")
'Relevant path to the Dictionary txt file
DicFilePath = ScriptPath & "Dictionary.txt"
'Capture and format the current date and time for the log file name
tmpDate = date
tmpTime = time
startDate = Replace(tmpDate, "/", "-")
startTime = Replace(tmpTime, ":", "-")
'Set the parameters for the Common Dialog
ObjCD.Filter = "Text Documents|*.txt|All Files|*.*" 'Filter only txt files
ObjCD.FilterIndex = 3
ObjCD.InitialDir = "" 'Set the initial path for the Common Dialog to the same folder as the script
'Display the File open dialog
InitFSO = ObjCD.ShowOpen
'How many chars to show int the Surrounding Text field of the report
SurroundingChars = 10
If InitFSO = False Then
'No file was selected so Error
Wscript.Echo "Script Error: Please select a file!"
Wscript.Quit(10)
Else
'ScanFilePath = the full path and filename if the file
ScanFilePath = ObjCD.FileName
Set objScanFile = ObjFSO.OpenTextFile(ScanFilePath, ForReading)
Set objDicFile = ObjFSO.OpenTextFile(DicFilePath, ForReading)
'Load the contents of the selected file into ScanFileText and close the file
ScanFileText = objScanFile.ReadAll
ScanFileTextForReport = ScanFileText
objScanFile.Close
'Clean up the strings
ScanFileText = Space(30) & ScanFileText & Space(31) 'Pad it will space the the start and end so th mid function does not fail
ScanFileTextForReport = replace(ScanFileTextForReport, chr(13), "<br>")
ScanFileText = Replace(ScanFileText, "<", "<",1,-1,1)
ScanFileText = Replace(ScanFileText, ">", ">",1,-1,1)
ScanFileTextForReport = Replace(ScanFileText, "<", "<",1,-1,1)
ScanFileTextForReport = Replace(ScanFileText, ">", ">",1,-1,1)
'Build the header of the CSV file
ResultReport = "<html><head><title>Scan Results Report for: " & ScanFilePath & "</title></head><body>"
ResultReport = ResultReport & "<h2>Scan Results Report for: <a href='" & ScanFilePath & "'>"& ScanFilePath &"</a> </h2>"
ResultReport = ResultReport & "<b>Scan Conducted: </b>" & tmpDate & " @ " & tmpTime & "<br>"
ResultReport = ResultReport & "<a href='" & DicFilePath &"'>View the Dictionary File</a><br><br>"
ResultReport = ResultReport & "<table width='400' border='1' cellpadding='0' cellspacing='0' bordercolor='#cccccc'>"
ResultReport = ResultReport & "<h2>Scan Matches</h2>"
ResultReport = ResultReport & "<tr bgcolor='#0099FF'>"
ResultReport = ResultReport & "<td><b>Word</b></td><td><b>Surrounding Text</b></td>"
ResultReport = ResultReport & "</tr>"
'Loop though each word in the dictionary and check if that word exists in the string ScanFileText
Do While objDicFile.AtEndOfStream <> True
'Reset
DicWordCount = 0
SurroundingText = ""
DicWordPos = 0
DicWordCount = 0
'Read the next word from the dictionary
DicWord = objDicFile.ReadLine
DicWordLength = len(DicWord)
DicWordPos = inStr(1, ScanFileText, DicWord,1)
If DicWordPos > 0 then
'Add the first Match to the report
MatchFound = True 'MatchFound if used to check if any match was found, if so a report will be created
SurroundingText = Trim(Mid(ScanFileText,DicWordPos -SurroundingChars, 30)) 'Get SurroundingChars before and after the word
'Mark the word
SurroundingText = Replace(SurroundingText, DicWord, "<b style='color: #FF0000'>"& DicWord & "</b>",1,-1,1)
'Increase the word count
DicWordCount = DicWordCount + 1
'Build a row for the report
ResultReport = ResultReport & "<tr><td>" & DicWord & "</td><td>" & SurroundingText & "</td></tr>"
'Mark the word in the Scanned File
ScanFileTextForReport = replace(ScanFileTextForReport, DicWord, "<b style='color: #FF0000'>"& DicWord & "</b>",1,-1,1)
Do while DicWordPos > 0
'Check if there are any other matchs
DicWordPos = inStr(DicWordPos+DicWordLength, ScanFileText, DicWord,1)
If DicWordPos > 0 then
'Build a row for the report
SurroundingText = Trim(Mid(ScanFileText,DicWordPos -SurroundingChars, 30)) 'Get SurroundingChars before and after the word
'Mark the word
SurroundingText = Replace(SurroundingText, DicWord, "<b style='color: #FF0000'>"& DicWord & "</b>",1,-1,1)
'Build a row for the report
ResultReport = ResultReport & "<tr><td> </td><td>" & SurroundingText & "</td></tr>"
DicWordCount = DicWordCount + 1
End if
Loop
ReportDicWordCounts = ReportDicWordCounts & "<b>" & DicWord & "</b> (" & DicWordCount & ") "
End if
Loop
'Close the dictionary file
objDicFile.Close
if MatchFound = true then
'If a Match is found
ResultReport = ResultReport & "</table>"
ResultReport = ResultReport & "<b>Totals:</b> " & ReportDicWordCounts
ResultReport = ResultReport & "<br><br><h2>Scanned File</h2>"
ResultReport = ResultReport & "<div style='position:absolute; height:300px; width:700px; background-color:#cccccc; overflow:auto;'>" & ScanFileTextForReport & "</div>"
ResultReport = ResultReport & "<br><br></body></html>"
'Save the report
ReportFilePath = ScriptPath & "Report_" & startDate & " " & startTime & ".htm" 'Generate the file name
Set objReportFile = objFSO.CreateTextFile(ReportFilePath)
objReportFile.Write(ResultReport)
'Close the report
objReportFile.close
'Display Yes No message
strMbox = MsgBox("Complete: MATCH FOUND!" & chr(13) & chr(10) & chr(13) & chr(10)& "Would you like to open the report: " & ReportFilePath,4,"Match Found: Open the report?")
if strMbox = 6 Then
'Yes Clicked
objShell.Run chr(34) & ReportFilePath & chr(34)
Else
'No Clicked
wscript.quit(0)
End if
Else
'If a Match is NOT found
wscript.echo "Complete." & chr(13) & chr(10) &" No Match"
wscript.quit(0)
End if
End If