' ' OneFile Search Engine (ofSearch v1.0) ' Copyright ?000 Sixto Luis Santos <sixtos@PRtc.net> ' All Rights Reserved ' ' Note: ' This program is freeware. This program is NOT in the Public Domain. ' You can freely use this program in your own site. ' ' You cannot re-distribute the code, by any means, ' without the express written authorization by the author. ' ' Use this program at your own risk. '
Dim Matched Dim Regex Dim GetTitle Dim fs Dim rfLen dim RootFolder Dim DocCount Dim DocMatchCount Dim MatchedCount
' ---------------------------------------------- ' Procedure: SearchFiles() ' ---------------------------------------------- Public Sub SearchFiles(FolderPath) Dim fsFolder Dim fsFolder2 Dim fsFile Dim fsText Dim FileText Dim FileTitle Dim FileTitleMatch Dim MatchCount Dim OutputLine
' Get the starting folder Set fsFolder = fs.GetFolder(FolderPath) ' Iterate thru every file in the folder For Each fsFile In fsFolder.Files ' Compare the current file extension with the list of valid target files If InStr(1, ValidFiles, Right(fsFile.Name, 3), vbTextCompare) > 0 Then DocCount = DocCount + 1 ' Open the file to read its content Set fsText = fsFile.OpenAsTextStream FileText = fsText.ReadAll ' Apply the regex search and get the count of matches found MatchCount = Regex.Execute(FileText).Count MatchedCount = MatchedCount + MatchCount If MatchCount > 0 Then DocMatchCount = DocMatchCount + 1 ' Apply another regex to get the html document's title Set FileTitleMatch = GetTitle.Execute(FileText) If FileTitleMatch.Count > 0 Then ' Strip the title tags FileTitle = Trim(replace(Mid(FileTitleMatch.Item(0),8),"</title>","",1,1,1)) ' In case the title is empty If FileTitle = "" Then FileTitle = "No Title (" & fsFile.Name & ")" End If Else ' Create an alternate entry name (if no title found) FileTitle = "No Title (" & fsFile.Name & ")" End If ' Create the entry line with proper formatting ' Add the entry number OutputLine = " <b>" & DocMatchCount & ".</B> " ' Add the document name and link OutputLine = OutputLine & "<A href=" & chr(34) & RootFld & replace(Mid(fsFile.Path, rfLen),"/","/") & chr(34) & "><B>" OutputLine = OutputLine & FileTitle & "</B></a>" ' Add the document information OutputLine = OutputLine & "<font size=1><br> Criteria matched " & MatchCount & " times - Size: " OutputLine = OutputLine & FormatNumber(fsFile.Size / 1024,2 ,-1,0,-1) & "K bytes" OutputLine = OutputLine & " - Last Modified: " & formatdatetime (fsFile.DateLastModified,vbShortDate) & "</Font><br>" ' Display entry Response.Write OutputLine Response.Flush End If fsText.Close End If Next
' Iterate thru each subfolder and recursively call this procedure For Each fsFolder2 In fsFolder.SubFolders SearchFiles fsFolder2.Path Next
Set FileTitleMatch = Nothing Set fsText = Nothing Set fsFile = Nothing Set fsFolder2 = Nothing Set fsFolder = Nothing End Sub
' ---------------------------------------------- ' Procedure: Search() ' ---------------------------------------------- Sub Search(SearchString) Dim i Dim fKeys Dim fItems
Set fs = CreateObject("Scripting.FileSystemObject") Set GetTitle = New RegExp Set Regex = New RegExp
With Regex .Global = True .IgnoreCase = True .Pattern = Trim(SearchString) End With With GetTitle .Global = False .IgnoreCase = True .Pattern = "<title>(.|/n)*</title>" End With
RootFolder = Server.MapPath(RootFld)
If Right(RootFld,1) <> "/" Then RootFld = RootFld & "/" End If
If Right(RootFolder, 1) <> "/" Then RootFolder = RootFolder & "/" End If rfLen = Len(RootFolder) + 1
SearchFiles RootFolder
If MatchedCount = 0 Then Response.Write " <B>No Matches Found.</b><BR>" End If
Set Regex = Nothing Set GetTitle = Nothing Set fs = Nothing
<% If Trim(Request.QueryString("query")) <> "" Then %> <hr> <table border="0" width="100%" bgcolor="#808080" cellspacing="0" cellpadding="0"> <tr> <td width="100%"><Font Color="#FFFFFF" Size="2"> Your search for <B><% =Request.QueryString("query")%></B> found the following documents:</Font></td> </tr> </table> <BR><BR> <% Response.Flush Search Request.QueryString("query") If DocCount > 0 Then %> <BR> <Font Size=1> (The search criteria "<%=Request.QueryString("query")%>" found <%=MatchedCount%> times in <% =DocMatchCount%> of <%=DocCount%> documents.) </font> <% End If End If %> <BR><BR> <hr><div align="center"> <Font size=1> OneFile Search Engine v1.0<br> Copyright?000 <a href="mailto:sixtos@prtc.net">Sixto Luis Santos</a>. All Rights Reserved </Font></div>