|
| Wildcard i søgestreng ? Fra : Jakob Munck |
Dato : 31-01-02 00:36 |
|
Jeg arbejder på en lille søgemaskine, der skal finde html-filer ud fra hvad
der står i deres head-sektion under metatags. Disse metatags kan f.eks. kan
se sådan ud:
.....
<META name="DESCRIPTION" content=" stole, skabe, kaminer, gardiner,
borde"></HEAD>
Koden, der anvender FileSystemObjektet, skal altså finde ud af om et af
brugeren valgt ord står i ovenstående tekststreng efter "content="" og før
"</HEAD>". Hvis man går ud fra at "%" betyder wildcard, altså et vilkårligt
antal uspecificerede karakterer, og mit formfelt hedder "SearchText" kunne
søgestrengen se sådan ud:
strSearchText = "content=" & "%" & Request("SearchText") & "%" & "</HEAD>"
Men det giver fejlmelding, for "%" betyder åbenbart - i denne sammenhæng -
ikke et vilkårligt antal uspecificerede karakterer. Men hvad er så den
rigtige kode for disse uspecificerede karakterer? Hvordan skal søgestrengen
så se ud?
v.h.
Jakob Munck
| |
Jørn Andersen (31-01-2002)
| Kommentar Fra : Jørn Andersen |
Dato : 31-01-02 00:59 |
|
On Thu, 31 Jan 2002 00:36:29 +0100, "Jakob Munck"
<jakob.munck@tdcadsl.dk> wrote:
Hej Jakob,
>Koden, der anvender FileSystemObjektet, skal altså finde ud af om et af
>brugeren valgt ord står i ovenstående tekststreng efter "content="" og før
>"</HEAD>". Hvis man går ud fra at "%" betyder wildcard, altså et vilkårligt
>antal uspecificerede karakterer, og mit formfelt hedder "SearchText" kunne
>søgestrengen se sådan ud:
>
>strSearchText = "content=" & "%" & Request("SearchText") & "%" & "</HEAD>"
I denne sammenhæng er "%" vel bare tegnet %.
I Access-SQL er % wildcard-tegn
Jeg tror du skal have fat i enten Regular Expressions eller
InStr-funktionen - men det er lidt svært for mig lige at se, hvor du
er henne.
>Men det giver fejlmelding
Hvilken?
<SNIP>
Good luck,
Jørn
| |
Jakob Munck (31-01-2002)
| Kommentar Fra : Jakob Munck |
Dato : 31-01-02 09:06 |
|
Hej Jørn
det var forkert af mig at sige, at koden giver fejlmelding. Det gør den
ikke. Men den finder heller ikke de filer, hvor det indtastede søgeord er i
deres metatags. Her ser du den samlede kode (minus formfilen). Den første
(udkommenterede) søgestreng virker fint, men den finder kun filer med ét ord
i metatags, nemlig det som kommer først. Men hvis der er 5 ord i metatags,
skal søgemaskinen naturligvis også kunne finde de andre. Hvis
FileSystemObject ville accepterer % som wildcard for et antal uspecificerede
karakterer, ville nedenstående kode virker. Men, som sagt, den finder intet.
Her er koden:
<HTML><BODY>
<B>Search Results for <%=Request("SearchText")%></B><BR>
<%
Const fsoForReading = 1
Dim strSearchText
' søgestreng der søger på første ord i metatags:
'strSearchText = "content" & """" & Request("SearchText")
' søgestreng der ikke finder noget:
strSearchText = "content=" & "%" & Request("SearchText") & "%" & "</HEAD>"
Dim objFSO
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Dim objFolder
'Set objFolder = objFSO.GetFolder(Server.MapPath("/"))
Set objFolder = objFSO.GetFolder(Server.MapPath("/soegemaskine_metatags/"))
Dim objFile, objTextStream, strFileContents, bolFileFound
bolFileFound = False
For Each objFile in objFolder.Files
If Response.IsClientConnected then
Set objTextStream = objFSO.OpenTextFile(objFile.Path,fsoForReading)
strFileContents = objTextStream.ReadAll
If InStr(1,strFileContents,strSearchText,1) then
Response.Write "<LI><A HREF=""/" & objFile.Name & _
""">" & objFile.Name & "</A><BR>"
bolFileFound = True
End If
objTextStream.Close
End If
Next
if Not bolFileFound then Response.Write "No matches found..."
Set objTextStream = Nothing
Set objFolder = Nothing
Set objFSO = Nothing
%>
</BODY></HTML>
Gode råd modtages med stor glæde.
v.h.
Jakob Munck
| |
|
|