12 messaggi dal 30 ottobre 2003
ciao a tutti è la prima volta che scrivo in questo forum.
sono poco più di un novellino in asp e girando per i siti ho trovato un motore di ricerca che funziona bene però mi serviva che evidenziasse la parola cercata.Ho trovato proprio in questo sito un articolo di Paolo Pinto sull'argomento :
----------------------------------------------
Nella realizzazione di un sito, dovevo realizzare una pagina per la ricerca di un termine nel database di un glossario.
Avevo quindi la necessità di evidenziare la parola trovata all'interno di un testo in seguito a tale ricerca ed ho scritto una funzione che evidenzia la parola cercata.
Poichè il testo deve essere visualizzato all'interno di una pagina html, per evidenziare la parola ho utilizzato questo codice:

<span style='background-color: rgb(128,0,0); color:
rgb(255,255,255)'><B>testo da evidenziare</B></span>

Ecco in dettaglio il funzionamento di TxtInside:
1) txtSearch è la variabile che assumerà il valore corrispondente alla parola da cercare
2) txt è la variabile che conterrà il testo in cui cercare
3) txtInside è la variabile che conterrà il testo con i tag che evidenziano la parola cercata.

Il principio di funzionamento è il seguente:
1) si calcola la lunghezza del testo in cui cercare: len_txt=len(txt)
2) si calcola la lunghezza della parola da cercare: len_txtSearch = len(txtSearch) (quindi se la parola è 'mare' la variabile len_txtSearch = 4)
3) si crea un loop che 'scorre' tutta la frase alla ricerca della parola, il loop termina appena raggiunta la lunghezza massima della frase.
4) l'istruzione: txtExtracted = mid(txt,i,len_txtSearch) estrae da txt al variare di i tutte le stringhe di lunghezza len_txtSearch e le confronta con la parola cercata.
5) se la stringa in txtExtracted = txtSearch allora con l'istruzione: txtBefore = mid(txt, x, i-x) viene ricavata la stringa che precede.
6) se è stata effettivamente trovata la parola, allora la ricerca deve continuare dai caratteri che seguono questa parola, quindi ci si deve spostare in avanti di i+len_Search caratteri
7) in txtTemp viene memorizzata la somma delle stringhe txtBefore e txtEvid (il nostro testo con i tag html)
8) in txtInside ricorsivamente verranno uniti tutti i pezzi elaborati fino a ricreare l'intera frase di partenza.

Per usare la funzione è sufficiente richiamarla in questo modo (segue la funzione):


<%
response.write TxtInside('prova', 'testo di prova per provare la funzione')

Function TxtInside(txtSearch,txt)

' Restituisce un testo formattato html, evidenziando una determinata parola
' Autore: Paolo Pinto
' email: paolo.pinto@galactica.it

Dim txtEvid
Dim i
Dim x
Dim txtTemp
Dim txtExtracted
Dim len_txt
Dim len_txtSearch

txtEvid = "<span style='background-color: rgb(128,0,0); color:
rgb(255,255,255)'><B>" & txtSearch & "</B></span>"
len_txt=len(txt)
len_txtSearch = len(txtSearch)

i=1
x=1
txtInside = ""
txtTemp = ""
do while i< len_txt+1

txtExtracted = mid(txt,i,len_txtSearch)
if ucase(txtExtracted) = ucase(txtSearch) then
txtBefore = mid(txt, x, i-x)
x=i+len_txtSearch
txtTemp = txtBefore & txtEvid
txtInside = txtInside & txtTemp
end if
i=i+1

loop

txtInside = txtInside & right(txt,len_txt-x+1)
if txtInside = "" then
txtInside = txt
end if
end function

%>
---------------------------------------------------------
e questo è lo script del motore con inseria la funzione Function TxtInside(txtSearch,txt) ma non riesco a capire come fare a far evidenziare la parola cercata nel campo "Descrizione" un grazie mille per l'aiuto che potete darmi
-----------------------------------------------------------
<%
PageName = Request.ServerVariables("PATH_INFO")
SearchMethod = Request.ServerVariables("REQUEST_METHOD")

If SearchMethod = "POST" Then
search = request.form("search")
page = 1
ElseIf SearchMethod = "GET" Then
search = request.QueryString("search")
page = Request.QueryString("page")
End If

respage = 5
%>
<html>
<head>
<title>Ricerca
<% If len(search) > 0 Then %>
"<%=search%>"
<% End If %>
</title>
<style type="text/css">
<!--
.text { font-family: Tahoma, Verdana, Arial, "MS Sans Serif"; font-size: 12px; color: #000033}
.link { font-family: Tahoma, Verdana, Arial, "MS Sans Serif"; font-size: 12px; color: #000066; text-decoration: none}
a.link:link { font-family: Tahoma, Verdana, Arial, "MS Sans Serif"; font-size: 12px; color: #000066; text-decoration: none }
a.link:visited { font-family: Tahoma, Verdana, Arial, "MS Sans Serif"; font-size: 12px; color: #000066; text-decoration: none }
a.link:hover { font-family: Tahoma, Verdana, Arial, "MS Sans Serif"; font-size: 12px; color: #CC0000; text-decoration: underline}
.highlight { background:#FFFF00}
-->
</style>
</head>
<body bgcolor="#FFFFFF" text="#000033" link="#000066" vlink="#000033" alink="#CC0000" leftmargin="1" topmargin="1" marginwidth="1" marginheight="1">
<table width="780" border="0" cellspacing="0" cellpadding="1" align="center" bgcolor="#000033">
<tr >
<td bgcolor="#000033">
<table border="0" cellpadding="2" cellspacing="0" align="center" width="780">
<tr bgcolor="#000033">
<td colspan="2" height="1"></td>
</tr>
<form method="post">
<tr bgcolor="#F3F3F3">
<td width="100" align="left" class="text" bgcolor=""><b>Testo Ricerca</b></td>
<td width="680" align="left" class="text">
<input type="text" name="search" size="30" value="<%=search%>">
<input type="submit" value="CERCA" name="submit">
</td>
</tr>
<tr bgcolor="#000033">
<td colspan="2" align="left" class="text" height="1"></td>
</tr>
</form>
<% If SearchMethod = "POST" And len(search) = 0 Then %>
<tr>
<td colspan="2" height="60" align="center" class="text" bgcolor="#FFFFFF"><b>Digitare un testo per la ricerca</b></td>
</tr>
<tr bgcolor="#000033">
<td colspan="2" height="1"></td>
</tr>
<% End If %>
<%
if len(search) > 0 then





set conn = server.createobject("adodb.connection")
'conn.open "driver={microsoft access driver (*.mdb)};dbq="&server.mappath("ricerca.mdb")
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inetpub\wwwroot\igiasp\ricerca.mdb"
conn.Open
sql = "select * from tabella_ricerca where"

ArrSearch = Split(search)
x = 0
for each Word In ArrSearch

If Not x = UBound(ArrSearch) Then
sql = sql & " Keywords like '%" & word & "%' and"
Else
sql = sql & " Keywords like '%" & word & "%'"
End If

x = x + 1
Next

'evidenza
Function TxtInside(txtSearch,txt)

' Restituisce un testo formattato html, evidenziando una determinata parola
' Autore: Paolo Pinto
' email: paolo.pinto@galactica.it

Dim txtEvid
Dim i
Dim x
Dim txtTemp
Dim txtExtracted
Dim len_txt
Dim len_txtSearch

txtEvid = "<span style='background-color: rgb(128,0,0); color:
rgb(255,255,255)'><B>" & txtSearch & "</B></span>"
len_txt=len(txt)
len_txtSearch = len(txtSearch)

i=1
x=1
txtInside = ""
txtTemp = ""
do while i< len_txt+1

txtExtracted = mid(txt,i,len_txtSearch)
if ucase(txtExtracted) = ucase(txtSearch) then
txtBefore = mid(txt, x, i-x)
x=i+len_txtSearch
txtTemp = txtBefore & txtEvid
txtInside = txtInside & txtTemp
end if
i=i+1

loop

txtInside = txtInside & right(txt,len_txt-x+1)
if txtInside = "" then
txtInside = txt
end if
end function




'fine evidenza
set rs = server.createobject("adodb.recordset")
rs.open sql, conn, 1, 3

if rs.eof then
%>
<tr align="center">
<td colspan="2" class="text" height="60" bgcolor="#FFFFFF"><b>Nessun
risultato trovato</b></td>
</tr>
<tr align="center" bgcolor="#000033">
<td colspan="2" class="text" height="1"></td>
</tr>
<%
else

rs.pagesize = respage
rs.absolutepage = page
%>
<tr>
<td colspan="2" class="text" bgcolor="#FFFFFF"><b>Pagina
<%=page%>/<%=rs.pagecount%>
- Risultati relativi alla ricerca: "<%=search%>" - Totale documenti
trovati <%=rs.recordcount%></b></td>
</tr>
<tr bgcolor="#000033">
<td colspan="2" class="text" height="1"></td>
</tr>
<tr>
<td colspan="2" bgcolor="#FFFFFF">
<table width="740" border="0" cellspacing="0" cellpadding="2" align="center">
<tr>
<td width="200" valign="top" class="link">
<% If clng(page) > 1 Then %>
<a href="<%=PageName%>?page=<%=page - 1%>&search=
<%=Server.UrlEncode(search)%>" class="link"><<
Precedente</a>
<% Else %>
<< Precedente
<% End If %>
</td>
<td width="140" valign="top" class="text"><b> Pagine trovate:
</b></td>
<td width="340" valign="top">
<table widht="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<%
For pag = 1 to rs.pagecount

if clng(page) = pag then
%>
<td width="34" align="right" class="link"><b><%=pag%></b></td>
<% else %>
<td width="34" align="right" class="link"><a href="<%=PageName%>?page=<%=pag%>&search=
<%=Server.UrlEncode(search)%>" class="link"><%=pag%></a></td>
<%
end if

If Right(pag,"1") = "0" Then
%>
</tr>
<tr>
<%
End If

Next
%>
</tr>
</table>
</td>
<td width="200" valign="top" class="link" align="right">
<% If clng(page) < rs.pagecount Then %>
<a href="<%=PageName%>?page=<%=page + 1%>&search=
<%=Server.UrlEncode(search)%>" class="link">Successivo
>></a>
<% Else %>
Successivo >>
<% End If %>
</td>
</tr>
</table>
</td>
</tr>
<tr bgcolor="#000033">
<td colspan="2" height="1"></td>
</tr>
<%
for i = 1 to respage
if not rs.eof then
%>
<tr bgcolor="#EFEFEF">
<td class="text" valign="top"><b>Titolo</b></td>
<td class="text" valign="top"><b><%=rs("Titolo")%></b></td>
</tr>
<tr bgcolor="#FFFFFF">
<td class="text" valign="top"><b>Descrizione</b></td>
<td class="text" valign="top">


<%= Replace(rs("Descrizione"),vbCrLf,"<br>") %></td>
</tr>
<tr bgcolor="#EFEFEF">
<td class="text" valign="top"><b>URL</b></td>
<td class="link" valign="top"><a href="<%=rs("Collegamento")%>" target="_blank" class="link"><%=rs("Titolo")%></a></td>
</tr>
<tr bgcolor="#000033">
<td colspan="2" class="link" height="1"></td>
</tr>
<%
rs.movenext
end if
next
%>
<tr>
<td width="780" colspan="2" bgcolor="#FFFFFF">
<table width="740" border="0" cellspacing="0" cellpadding="2" align="center">
<tr>
<td width="200" valign="top" class="link">
<% If clng(page) > 1 Then %>
<a href="<%=PageName%>?page=<%=page - 1%>&search=
<%=Server.UrlEncode(search)%>" class="link"><<
Precedente</a>
<% Else %>
<< Precedente
<% End If %>
</td>
<td width="140" valign="top" class="text"><b> Pagine trovate:
</b></td>
<td width="340">
<table widht="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<%
For pag = 1 to rs.pagecount

if clng(page) = pag then
%>
<td align="right" width="34" class="link"><b><%=pag%></b></td>
<% else %>
<td align="right" width="34" class="link"><a href="<%=PageName%>?page=<%=pag%>&search=
<%=Server.UrlEncode(search)%>" class="link"><%=pag%></a></td>
<%
end if

If Right(pag,"1") = "0" Then
%>
</tr>
<tr>
<%
End If

Next
%>
</tr>
</table>
</td>
<td width="200" valign="top" class="link" align="right">
<% If clng(page) < rs.pagecount Then %>
<a href="<%=PageName%>?page=<%=page + 1%>&search=
<%=Server.UrlEncode(search)%>" class="link">Successivo
>></a>
<% Else %>
Successivo >>
<% End If %>
</td>
</tr>
</table>
</td>
</tr>
<tr bgcolor="#000033">
<td width="780" colspan="2" height="1"></td>
</tr>
<%
end if
rs.close
set rs = nothing
conn.close
set conn = nothing

end if
%>
</table>
</td>
</tr>
</table>
</body>
</html>
11.886 messaggi dal 09 febbraio 2002
Contributi
ehm... non ho capito niente... e l'influenza adesso non mi aiuta, comunque:

Se vuoi fare una ricerca di una parola in un testo ti basta fare:

dim trovato
trovato = Instr(testo, parola)

se trovato è > 0 allora la parola è stata trovata, altrimenti no.
Se vuoi sapere quante ricorrenze hai di parola in testo puoi usare una regexp oppure fai un ciclo usando instr finchè non raggiungi la fine di testo. Guarda tutti i parametri che supporta Instr a questo indirizzo:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/vsfctinstr.asp

successivamente, se vuoi sostituire la parola trovata con una sua versione evidenziata, usa la funzione Replace:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/vsfctreplace.asp

può risolvere il problema?
molto probabilmente quello che hai fatto è ugualmente valido ma andare a fare il debug su un codice più conciso è senz'altro meno stressante :)

Enjoy learning and just keep making
12 messaggi dal 30 ottobre 2003
grazie per aver risposto.
dunque il mio problema è quello di far evidenziare la parola inserita nel form di ricerca, es:inserisco "LEGGE" e quando trova un documento con la parola LEGGE nella descrizione deve evidenziare LEGGE es:la LEGGE nxxxdel 2003 è uguale alla LEGGE del 2000 e alla LEGGE ......e così di seguito.Come l'esempio di Paolo Pinto: http://www.aspitalia.com/liste/usag/script.aspx?ID=285&Search=evidenziare+risultati+ricerca

e come ho scritto sono molto novellino in asp e il motore non e farina del mio sacco (magari!) ma l'ho trovato girando per i siti e comunque ho visto che la funzione REPLACE c'è
<td class="text" valign="top"><b>Descrizione</b></td>
<td class="text" valign="top">
<%=Replace(rs("Descrizione"),vbCrLf,"<br>")%></td>
ps.vbCrLf che è inserito nel codice che ho trovato non riesco a capire a cosa serva.

proprio dove serve a me ma non và anche perchè non capisco come si imposta il colore che deve evidenziare la parola
ho visto (in inglese già capisco poco di asp poi l'inglese.....)il link sulla funzione REPLACE ma non riesco a capire come sfruttarla

MyString = Replace("XXpXXPXXp", "p", "Y")
' Returns "YXXYXXY".
nel mio caso dovrebbe essere:
<%=Replace(rs("Descrizione","p",y")%>???????????

a posto di "XXpXXPXXp", devo inserire "Descrizione"??

e il colore come si sceglie???

sò che chiedo molto mi faccio pena da solo per la mia ignoranza e chiedo venia
comunque grazie





2.584 messaggi dal 14 maggio 2001
....txtEvid = "<span style='background-color: rgb(128,0,0); color:
rgb(255,255,255)'><...
Il colore lo scegli qui come terna di colori da 0 a 255 (red, green, blue)


<%=Replace(rs("Descrizione"),vbCrLf,"<br>")%>
qui sostituisci il <br> (a capo in Html) con VbcrLf (a capo in Vbscript)
11.886 messaggi dal 09 febbraio 2002
Contributi
giusto un consiglio in più:

tu devi sostituire la parola LEGGE con una sua versione evidenziata.
Quindi, nella pagina finale, anzichè esserci scritto LEGGE ci dovrà essere
<span style="background-color: rgb(128,0,0); color: rgb(255,255,255)">LEGGE</span>

si tratta di sostituire tutte le occorrenze di LEGGE con quella roba sotto. Quindi fai:

<%=Replace(rs("Descrizione"),txtSearch,"<span style=""background-color: rgb(128,0,0); color: rgb(255,255,255)"">" & txtSearch & "</span>")%>

dovrebbe funzionare, prova

Enjoy learning and just keep making
12 messaggi dal 30 ottobre 2003
funziona benissimo grazie era più facile di quello che sembrava!

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.