webForumDet fria alternativet

Sök efter text i filer och returnera url till dokumentet.

ASP

9 svar · 341 visningar · startad av mattiasnordin

Medlem sedan maj 20012 080 inlägg
Frågan#1

Jag tänkte skapa ett skript som söker igenom alla textfiler i webrooten och letar efter ett angivet ord. Vill att träffar visas som länkar till de dokumenten.

Är det nåon som har några erfarenheter av detta. Det kanske finns något klart som är gratis att använda redan?

Eller finns det inte något sätt att söka i en fil med VBskript?

Medlem sedan feb. 200112 078 inlägg
#2

Ur huvudet, lite ont om tid:

path = server.mappath("./")
word = "override"

set fso = server.createobject("scripting.filesystemobject")
set folder = fso.getFolder(path)

for each file in folder.files
  Set objfile = fso.OpenTextFile(path & "/" & file.name, ForReading, False)

   while not objfile.AtEndOfStream 
      strAll = objfile.ReadAll
      if instr(strAll,word) > 0 then
         response.write "Träff: <a href='" & file.name & "'>" & file.name & "</a><br>"
      end if
   wend

   objFile.Close
next

set folder = nothing
set fso = nothing
Medlem sedan maj 20012 080 inlägg
#3

Ser lovande ut.... man tackar...

Just nu smäller det på denna rad:

  Set objfile = fso.OpenTextFile(path & "/" & file.name, ForReading, False)

Microsoft VBScript runtime error '800a0005'

Invalid procedure call or argument

/site_info_script/text_search.asp, line 11

Vi får väl se vem som hittar felet först.

;)

Medlem sedan maj 20012 080 inlägg
#4

Variabeln "ForReading" ska tydligen vara en siffra där tex 1 = reading...

<%
path = server.mappath("/site_info_script/")
Const ForReading = 1, ForWriting = 2, ForAppending = 3
word = "mattias"
	
set fso = server.createobject("scripting.filesystemobject")
set folder = fso.getFolder(path)
for each file in folder.files
  Set objfile = fso.OpenTextFile(path & "/" & file.name, ForReading, False)
	
   while not objfile.AtEndOfStream 
      strAll = objfile.ReadAll
      if instr(strAll,word) > 0 then
         response.write "Träff: <a href='" & file.name & "'>" & file.name & "</a><br>"
      end if
   wend

   objFile.Close
next

set folder = nothing
set fso = nothing
%>

Tack ska du har för hjälpen, override! :)

Medlem sedan maj 20012 080 inlägg
#5

Hmmm.... Hur får man lättast till en loop som gör att sökningen går in i alla underkataloger på alla kataloger i webrooten?

Tacksam för hjälp. :r

Medlem sedan maj 20012 080 inlägg
#6

Hmmm... jag är inte världsbäst på det här. Behöver få reda på hur man på ett smidigt sätt loopar igenom alla kataloger + subkataloger på webrooten.

Jag har labbat med följande och det söker genom alla subkataloger i webrooten. Nu behöver fixa till något som även kollar i deras subkataloger.

Behöver hjälp? Är jag helt fel ute??? Finns det något enklare sätt? :p

<%
sSearchFor = Request.form("form_search_for") 
%>

<form method="POST" action="text_search.asp" name="ChangeInfoForm">
	<input type="text" name="form_search_for" value="<%=sSearchFor%>">
<input style="width:75"  type="submit" name="ChangeButton" value="change">

<%
path = server.mappath("/")
word = sSearchFor
Const ForReading = 1, ForWriting = 2, ForAppending = 3

set fso = server.createobject("scripting.filesystemobject")
Set folder = fso.GetFolder(path)  
Set folderCollection = folder.SubFolders   

For Each subfol in folderCollection
	mySubPath = subfol.Name   
	myFolderPath = path &"\" &MySubPath
	funSearchFolder(myFolderPath) ' Starta funktionen som letar i filerna i denna katalogen '
Next
%>

<%
function funSearchFolder(myFolderPath)
set folder = fso.getFolder(myFolderPath)
response.write "<hr>" &myFolderPath &"<br>"
		
for each file in folder.files
	varFileName = file.name
	if instr(varFileName,".asp") > 0 then
		  Set objfile = fso.OpenTextFile(myFolderPath &"/" & file.name, ForReading, False)
		   while not objfile.AtEndOfStream 
		      strAll = objfile.ReadAll
		      if instr(strAll,word) > 0 then
		         response.write "<font face=verdana size=2 color=darkred>" &folder.name &" - <a href=>" &file.name & "</a></font><br>"
		      else 
				response.write "<font face=verdana size=2 color=cccccc>" &folder.name &" - Not found.</font><br>"
			  end if
		   wend
		   objFile.Close
	end if
next	
end function

set folder = nothing
set fso = nothing
%>
Medlem sedan mars 20015 287 inlägg
#7

Spontan tanke, du har nu en funktion som kollar efter filer. Kan du inte göra en funktion av folderkollen också som du kallar på i sig själv(!)
Blir kanske vad som kalla rekursiv funktion?

Medlem sedan aug. 20012 349 inlägg
#8

Här finns ett exempel på en function som går igenom alla kataloger och filer, du kan nog modifiera det så det passar in på din sökning.
http://www.4guysfromrolla.com/webtech/091499-1.shtml

Medlem sedan maj 20012 080 inlägg
#9

Följande skript verkar vara lovande. Men jag förstår inte riktigt hur file system objectet fungerar. Koden mellan ''''''''''''''''''''''''''''' har jag lag till.
Det smäller nu på: Set SelectedFile = fso.OpenTextFile(Path &"/" &varFileName, ForReading, False)

Vad gör jag för fel?

<%
Path = server.mappath("/")    
Recurse(Path)
%>
<%
    	Sub Recurse(Path)
    		
    		Dim fso, Root, WindowsFolder, Files, _
    			Folders, File, i, FoldersArray(100)
    			
    		Set fso = Server.CreateObject("Scripting.FileSystemObject")
    		Set Root = fso.getfolder(Path)
    		Set Files = Root.Files
    		Set Folders = Root.SubFolders
    		For Each File In Files
    			'''''''''''''''''''''''''''''
    			varFileName = Path &"\" &file.name
				response.write varFileName
				if instr(varFileName,".asp") > 0 then
					Set SelectedFile = fso.OpenTextFile(varFileName, ForReading, False)
				 	while not SelectedFile.AtEndOfStream 
				    	strAll = SelectedFile.ReadAll
				      	if instr(strAll,word) > 0 then
					         response.write "<font face=verdana size=2 color=darkred>" &folder.name &" - <a href=>" &file.name & "</a></font><br>"
					    else 
							response.write "<font face=verdana size=2 color=cccccc>" &folder.name &" - Not found.</font><br>"
						end if
				   	wend
			   		selectedFile.Close
				end if
    			'''''''''''''''''''''''''''''
    		Next
    			
    		For Each Folder In Folders
    			'''''''''''''''''''''''''''''
    			'Code For Each Folder Found
    			response.write "<font color=green>" &folder.name &"</font><br>"
				'Goes Here!
    			'''''''''''''''''''''''''''''
    			FoldersArray(i) = Folder.Path
    			i = i + 1
    		Next
    			 	
    		For i = 0 To UBound(FoldersArray)
    			if FoldersArray(i) <> "" Then 
    				Recurse FoldersArray(i)				
    			Else
    				Exit For
    			End if
    		Next
    		
    	End Sub
    %>

Microsoft VBScript runtime error '800a0005'

Invalid procedure call or argument

/site_info_script/text_search2.asp, line 44

Medlem sedan maj 20012 080 inlägg
#10

Hur många gånger får man gå på exakt samma nit innan man blir kallad för DUM?

Det är dagens fråga ;)

Glömde bort: Const ForReading = 1, ForWriting = 2, ForAppending = 3

Som behövs till: Set SelectedFile = fso.OpenTextFile(varFileName, ForReading, False)

261 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)