26. oktober 2002 - 15:52Der er
36 kommentarer og 1 løsning
Søge - vist noget med arrays ???
I mit forsøg på at sammensætte noget der skulle blive til en nogenlunde fornuftig indexsøger til egne access databaser er jeg stødt ind i et par problemer som jeg ikke kan se mig ud af.
Mit problem er kort sagt visning af søgeresultatet. Jeg har forsøgt mig med en funktion som viser de første 250 tegn af den fundne artikel eller side om man vil. Bruger i den forbindelse en highlight funktion som markerer søgeordet i teksten. Det virker også fint nok hvis søgeordet ligger i de første 250 ord, men er søgeordet derefter sker der ingen markering.
Problemet er med andre ord at ved visning af søgeresultatet ikke nødvendigvis skal vise de FØRSTE 250 tegn, men f.eks. 250 tegn fra søgeordet.
Målet er at vise eks. 10 tegn før søgeordet og 20 efter søgeordet + "..." - derefter søge efter søgeordet igen - finder den det igen - samme procedure til max 250 tegn er vist.
Jeg tror man skal ind på arrays, men idet jeg er så usikker på dette er det også at jeg stiller spørgsmålet her. Jeg tror også det er noget som andre kunne finde interessant.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
men hvis søge ordet findes før det 10. tegn vil (hvorersoegeord-10) give mindre end 1, det må det ikke være, så der skal et ekstra check på
ala
hvorersoegeord = instr(databasetekst, sogeord) hvorersoegeord = (hvorersoegeord-10) if hvorersoegeord < 1 Then hvorersoegeord = 1 End If tekst = mid( Rs("databasetekst"), hvorersoegeord, (Len(sogeord)+20) )
Det ser ikke helt sort ud, men skal lige tygge på den...
Lige nu bruger jeg bare response.write Regreplace(LEFT(rs("article"), 250)) hvor regreplace fjerer alle html tags ,men den er ikke helt så kanon som den kunne være...
lidt mere konkret så hedder mit:
Søgeord: strKeyword dbudtræk: atricle
Det du siger er så f.eks. Dim strKeyword, hvorsøgeord, Hvorsøgeord = instr(Rs("article"),strKeyword) strOutput = mid( Rs("article"),(hvorsøgeord-10),(Len(strKeyword)+20))
FindStrKeyword = instr(databasetekst, strKeyword) skulle jo gerne være FindStrKeyword = instr(rs("article"), strKeyword) Men gør jeg det får jeg problem er med en RegEx.Replace som dem melder fejl på!... Hmmm
<% ' Henter værdien fra soeg.htm dim strKeyword strKeyword = Trim(Request.Form("Keyword"))
If Len(strKeyword) = 0 Then ' Hvis der ikke er skrevet i feltet Response.Clear Response.Redirect("index.asp") Else ' Hvis der er skrevet i feltet strKeyword = Replace(strKeyword,"'","''") End If
' Opbygger en dynamisk SQL streng strSQL = "SELECT ID, Title, Article FROM Articles WHERE" strSQL = strSQL & " (Title LIKE '%" & strKeyword & "%')" strSQL = strSQL & " OR (Article LIKE '%" & strKeyword & "%')"
' Skaber DSNLess forbindelse til DBen strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("CMS.mdb") Set myConn = Server.CreateObject("ADODB.Connection") myConn.Open strDSN
' Skaber et recordset udfra SQL strengen Set rs = myConn.Execute(strSQL)
Function RegReplace(inStr) Dim regEx Set regEx = New RegExp regEx.Global = True regEx.IgnoreCase = True regEx.Pattern = "<[^>]+>" inStr=regEx.Replace(inStr, "") RegReplace=inStr End Function
Function Highlight(strText, strFind, strBefore, strAfter)
' Parameters: ' strText - string to search in ' strFind - string to look for ' strBefore - string to insert before the strFind ' strAfter - string to insert after the strFind
If nLen > 0 And Len(Highlight) > 0 Then nPos = InStr(1, Highlight, strFind, 1) Do While nPos > 0 Highlight = Left(Highlight, nPos - 1) & _ strBefore & Mid(Highlight, nPos, nLen) & strAfter & _ Mid(Highlight, nPos + nLen)
nPos = InStr(nPos + nLenAll, Highlight, strFind, 1) Loop End If End Function
If Not (rs.BOF Or rs.EOF) Then ' Hvis der er fundet poster på søgningen Response.Write "<p>Søgeresultat</p>" Response.Write "<table border=0>"
Do While Not rs.EOF
databasetekst = RegReplace(rs("article")) FindStrKeyword = instr(databasetekst, strKeyword) hvorersoegeord = (FindStrKeyword-10) if hvorersoegeord < 1 Then hvorersoegeord = 1 End If
Response.Write "</table>" Else ' Hvis der ikke er fundet poster på søgningen Response.Write "<p>Der er ikke fundet noget på denne søgning</p>" End If ' Rydder op efter os myConn.Close Set myConn = Nothing %>
Lå i: strOutput = mid(databasetekst,hvorersoegeord ,(Len(strKeyword)+20)) som før var strOutput = mid(rs("article"),hvorersoegeord ,(Len(strKeyword)+20))
Men jeg havde defineret databasetekst = re("article")
Nu mangler den kun at skrive de søgeord den finder andre steder i teksten, men det var svært eller hva mente du ?
jeg kan godt prøve at hjælpe dig med funktionen....
;)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.