Foros del Web » Programando para Internet » ASP Clásico »

Resaltar palabras buscadas

Estas en el tema de Resaltar palabras buscadas en el foro de ASP Clásico en Foros del Web. Hola a todos. Había ya un post con este tema pero no me ha solucionado nada, a ver si ahora se me puede solucionar. Tengo ...
  #1 (permalink)  
Antiguo 29/04/2005, 04:41
 
Fecha de Ingreso: julio-2003
Mensajes: 116
Antigüedad: 20 años, 11 meses
Puntos: 0
Resaltar palabras buscadas

Hola a todos. Había ya un post con este tema pero no me ha solucionado nada, a ver si ahora se me puede solucionar.

Tengo un buscador en asp y quiero que cuando se muestren los resultados de la búsqueda se muestren las palabras buscadas en otro color o en negrita. Peor no hay manera de conguirlo. Además, está el problema de las mayusculas minusculas, que no sé como hacer para que cuando escriban "Pepe" o "pepe" sean la misma palabra.

A ver si me podeis echar una mano por favor.

Gracias.
  #2 (permalink)  
Antiguo 29/04/2005, 07:14
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Lo de resaltar palabras pues se implementa una rutina con funciones de cadena que busque (InStr), y si quieres que remplace (Replace("pepe", "<b>pepe</b>")). Y por lo de distinguir entra mayúsculas o minúsculas, pues usas Ucase o LCase al momento de hacer las búsquedas.
  #3 (permalink)  
Antiguo 29/04/2005, 08:16
 
Fecha de Ingreso: julio-2003
Mensajes: 116
Antigüedad: 20 años, 11 meses
Puntos: 0
A ver si me entero:
Yo lo que hago es recoger la palabra a buscar de un formulario y lo llamo por ejemplo cadena.

criterio=request.form("criterio")

Luego hago un SQL:
SQL="Select * from mensajes where mensaje like '%"&criterio&"%'"

Vale, y como hago ahora para implementar esa función y para que respete si la palabra en el mensaje empieza por mayúscula o minúscula? No se si me explico, a ver:

La palabra a buscar es pedro y en el mensaje original la palabra es Pedro. ¿Cómo puedo hacer para colorear Pedro independientemente de que en la búsqueda se haya puesto pedro?

Si me lo podeis explicar con código sería muy de agradecer. Gracias.
  #4 (permalink)  
Antiguo 30/04/2005, 10:57
 
Fecha de Ingreso: julio-2003
Mensajes: 116
Antigüedad: 20 años, 11 meses
Puntos: 0
Por favor, una ayudita a un payo!!! jejeje
  #5 (permalink)  
Antiguo 30/04/2005, 12:21
 
Fecha de Ingreso: julio-2003
Mensajes: 116
Antigüedad: 20 años, 11 meses
Puntos: 0
Ya he conseguido resaltar la palabra de búsqueda independientemente de si se busca en mayusculas o minúsculas.
Pongo todo loque he hecho para a ver si le sirve al alguien:


criterio=request.form("criterio") 'El criterio de búsqueda
SQL="Select * from mensajes where mensaje like '%"&criterio&"%'"
set rs=conn.execute(SQL)

'Busco dentro del campo mensaje la palabra buscada para saber la posición que ocupa en el mensaje
var1=instr(UCase(rs.fields("mensaje")),Ucase(crite rio))

'Le calculo la longitud
longi=len(criterio)

'Y ahora saco la palabra tal y como está en el mensaje original
var2=mid(rs.fields("Mensaje"),var1,longi)

'La mostramos por pantalla reemplazándola por la misma palabra en negrita y con color rojo
response.write replace(rs.fields("Mensaje"),var2,"<strong><font color=#ff0000>"&var2&"</font></strong>")



¿Qué os parece?

Última edición por knarfy; 02/05/2005 a las 02:25
  #6 (permalink)  
Antiguo 01/05/2005, 00:45
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 2 meses
Puntos: 9
Knarfy, te comento que la funcion InStr viene con un metodo para hacer que distinga o no entre palabras minusculas o mayusculas. Debes poner InStr(1, Cadena, Cadena_a_buscar, metodo)

En donde 1 es la posicion en donde quieres que comienze la busqueda; Cadena, es el texto en donde quieres que busque; Cadena_a_buscar, es la palabra que quieres que encuentre; método posee dos, el vbBinaryCompare (por defecto, distingue entre minusculas y mayusculas) y vbTextCompare, que no distingue entre minusculas y mayusculas. Debes poner las constantes 0 y 1 respectivamente para que te funcione correctamente.
Esepro que te haya servido de algo, por más que ya lo hayas solucionado, siempre es bueno saber otra forma de hacerlo.
SAludos.
  #7 (permalink)  
Antiguo 03/05/2005, 13:11
 
Fecha de Ingreso: julio-2003
Mensajes: 116
Antigüedad: 20 años, 11 meses
Puntos: 0
Tengo otro problema, ahora cuando quiero buscar varias palabras, solo me resalta la última palabra que se ha introducido en el formulario.

Lo que hago es separar las palabras con split, y luego con un bucle for each recorro la matriz resultante del split.

¿Cómo hago ahora para que me resalte cada palabra buscada usando lo que hice antes?
  #8 (permalink)  
Antiguo 03/05/2005, 13:31
Avatar de Saruman  
Fecha de Ingreso: mayo-2003
Ubicación: Panama city, Panama, Panama
Mensajes: 1.154
Antigüedad: 21 años
Puntos: 5
de lo que entiendo de tu mensaje es que estas callendole encima del texto a las palabras que estás resaltando y por eso te queda siempre la ultima.

dentro de ese for each marcar la palabra en la posición en que se encuentra el array del split y formatearlo con lo que tienes y guardar eso en una variable asi:

Código:
mytexto = ""
for i = 0 to ubound(palabras_split)
    mytexto = mytexto & "lo que sea"
next

response.write(mytexto)
__________________
Saruman

One Ring to rule them all, One Ring to find them, One Ring to bring them all and in the darkness bind them.
  #9 (permalink)  
Antiguo 03/05/2005, 13:43
 
Fecha de Ingreso: julio-2003
Mensajes: 116
Antigüedad: 20 años, 11 meses
Puntos: 0
A ver, lo que me has puesto me dice que no coinciden los tipos: "ubound"
Pongo el código de lo que yo tengo a ver si os sirve mejor:

<%
resalte=request.form("criterio")
texto=split(resalte)

for each elemento in texto
var1=instr(UCase(rs2.fields("mensaje")),Ucase(elem ento))
longi=len(elemento)

if var1<>0 then
var2=mid(rs2.fields("Mensaje"),var1,longi)
end if
next
response.write replace(rs2.fields("Mensaje"),var2,"<strong><font color=#ff0000>"&var2&"</font></strong>")

%>


El campo "Mensaje" es de tipo MEMO, que almacena el mensaje del foro.

Para buscar una palabra funciona. Me resalta en rojo todas las palabras buscadas que hay en el mensaje, pero cuando pongo dos o más, me resalta solo la última.

¿Cómo lo soluciono? Si necesitais que ponga más código decirmelo.

Gracias.
  #10 (permalink)  
Antiguo 03/05/2005, 13:52
Avatar de Saruman  
Fecha de Ingreso: mayo-2003
Ubicación: Panama city, Panama, Panama
Mensajes: 1.154
Antigüedad: 21 años
Puntos: 5
que te parece asi??
asi yo lo hice para mi site y me funciona perfectamente....

saludos

Código:
resalte=request.form("criterio")
texto=split(resalte, " ")

mensaje = rs2.fields("Mensaje")

for I = 0 to ubound(texto)
	mensaje = replace(mensaje, texto(I), "<strong><font color=#ff0000>" & texto(I) & "</font></strong>")
next

response.write(mensaje)
__________________
Saruman

One Ring to rule them all, One Ring to find them, One Ring to bring them all and in the darkness bind them.
  #11 (permalink)  
Antiguo 04/05/2005, 02:33
 
Fecha de Ingreso: julio-2003
Mensajes: 116
Antigüedad: 20 años, 11 meses
Puntos: 0
Saruman de esa manera no me resalta la palabra. Ni buscando una sola ni dos o más palabras. A ver si me podeis seguir ayudando maestros.
  #12 (permalink)  
Antiguo 04/05/2005, 05:45
Avatar de trasgukabi  
Fecha de Ingreso: septiembre-2004
Mensajes: 2.749
Antigüedad: 19 años, 9 meses
Puntos: 18
Cita:
Iniciado por Saruman
que te parece asi??
asi yo lo hice para mi site y me funciona perfectamente....
[/CODE]
si a él le funciona, piensa que algo habrás hecho mal, como no cambiar los nombres de las variables o del request.form o algo así
  #13 (permalink)  
Antiguo 04/05/2005, 07:14
Avatar de Saruman  
Fecha de Ingreso: mayo-2003
Ubicación: Panama city, Panama, Panama
Mensajes: 1.154
Antigüedad: 21 años
Puntos: 5
knarfy... cópialo igualito y ejecutalo como test.asp.
es el mismo código que te puse anteriormente.... como te decia, me funciona perfectamente, lo único es que la cadena a buscar debe ser igual, quiero decir, que influye si tiene mayusuculas o ambas... pero eso lo puedes arreglar...

saludos

Código HTML:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>búsqueda</title>
</head>

<body style="font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;">

<%
	mensaje = "Knarfy, te comento que la funcion InStr viene con un metodo para hacer que distinga o no entre palabras minusculas o mayusculas. Debes poner "_
	& "InStr(1, Cadena, Cadena_a_buscar, metodo) En donde 1 es la posicion en donde quieres que comienze la busqueda; Cadena, es el texto en donde quieres que busque; " _
	& "Cadena_a_buscar, es la palabra que quieres que encuentre; método posee dos, el vbBinaryCompare (por defecto, distingue entre minusculas y mayusculas) y " _
	& "vbTextCompare, que no distingue entre minusculas y mayusculas. Debes poner las constantes 0 y 1 respectivamente para que te funcione correctamente." _
	& " Esepro que te haya servido de algo, por más que ya lo hayas solucionado, siempre es bueno saber otra forma de hacerlo.SAludos."
	
	texto = request.Form("texto")
	texto_split = split(texto, " ")
	
	for I = 0 to ubound(texto_split)
		mensaje = replace(mensaje, texto_split(I), "<strong><font color=#ff0000>" & texto_split(I) & "</font></strong>")
	next
	
	response.Write(mensaje)
%>

<form name="form1" method="post" action="test.asp">
  <input type="text" name="texto">
  <input type="submit" name="Submit" value="Submit">
</form>
</body>
</html> 
__________________
Saruman

One Ring to rule them all, One Ring to find them, One Ring to bring them all and in the darkness bind them.
  #14 (permalink)  
Antiguo 04/05/2005, 07:37
 
Fecha de Ingreso: julio-2003
Mensajes: 116
Antigüedad: 20 años, 11 meses
Puntos: 0
He combinado el método de Saruman con lo que hice yo para distinguir mayúsculas y minúsculas pero sigue resaltándome solamente la última palabra que hay en el campo criterio.
Aquí pongo el código para ver si se os puede ocurrir alguna idea, que esto me está matando:
Código:
texto=split(resalte," ")

for i=0 to ubound(texto)
var1=Instr(UCase(rs2.fields("mensaje")),Ucase(texto(i)))
longi=len(texto(i))
texto(i)=mid(rs2.fields("Mensaje"),var1,longi)
mensaje=replace(rs2.fields("Mensaje"),texto(i),"<strong><font color=#ff0000>"&texto(i)&"</font></strong>")
next

response.write mensaje
  #15 (permalink)  
Antiguo 04/05/2005, 07:40
Avatar de Saruman  
Fecha de Ingreso: mayo-2003
Ubicación: Panama city, Panama, Panama
Mensajes: 1.154
Antigüedad: 21 años
Puntos: 5
Cita:
Iniciado por knarfy
He combinado el método de Saruman con lo que hice yo para distinguir mayúsculas y minúsculas pero sigue resaltándome solamente la última palabra que hay en el campo criterio.
man, probaste el ultimo que mande... eso lo puse hace como 10 minutos, lo probe y funciono super cool..... para mi el problema va a ser la parte de convertir a mayusculas....
__________________
Saruman

One Ring to rule them all, One Ring to find them, One Ring to bring them all and in the darkness bind them.
  #16 (permalink)  
Antiguo 04/05/2005, 09:22
 
Fecha de Ingreso: julio-2003
Mensajes: 116
Antigüedad: 20 años, 11 meses
Puntos: 0
Perdona Saruman, no lo había visto, lo pruebo y te digo que tal me fue.
  #17 (permalink)  
Antiguo 07/05/2005, 11:08
 
Fecha de Ingreso: julio-2003
Mensajes: 116
Antigüedad: 20 años, 11 meses
Puntos: 0
Perdon por el retraso. Mirad, creo que el problema es al rescatar el mensaje de la base de datos. Si uso el método de Saruman y le asigno a la variable "mensaje" el texto, o sea así:
Código:
mensaje = "Knarfy, te comento que la funcion InStr viene con un metodo para hacer que distinga o no entre palabras minusculas o mayusculas. Debes poner "_
& "InStr(1, Cadena, Cadena_a_buscar, metodo) En donde 1 es la posicion en donde quieres que comienze la busqueda; Cadena, es el texto en donde quieres que busque; " _
& "Cadena_a_buscar, es la palabra que quieres que encuentre; método posee dos, el vbBinaryCompare (por defecto, distingue entre minusculas y mayusculas) y " _
& "vbTextCompare, que no distingue entre minusculas y mayusculas. Debes poner las constantes 0 y 1 respectivamente para que te funcione correctamente." _
& " Esepro que te haya servido de algo, por más que ya lo hayas solucionado, siempre es bueno saber otra forma de hacerlo.SAludos."

aí funciona. Pero cuando asigno a la variable "mensaje" el valor del recordset del campo "mensaje" de la base de datos, solamente me busca la última palabra.

¿Cómo podría solucionarlo?

Gracias.

Última edición por knarfy; 07/05/2005 a las 11:17
  #18 (permalink)  
Antiguo 08/05/2005, 04:27
 
Fecha de Ingreso: julio-2003
Mensajes: 116
Antigüedad: 20 años, 11 meses
Puntos: 0
Por favor, echarme una manita plis, que no encuentro la manera de acabar este curro.
Gracias.
  #19 (permalink)  
Antiguo 09/05/2005, 10:06
 
Fecha de Ingreso: julio-2003
Mensajes: 116
Antigüedad: 20 años, 11 meses
Puntos: 0
¿Nadie ha hecho un buscador basado en una base de datos que resalta las palabras buscadas tal y como se hace en este foro? ¿Nadie tiene una idea?
  #20 (permalink)  
Antiguo 21/05/2005, 18:52
 
Fecha de Ingreso: julio-2003
Mensajes: 116
Antigüedad: 20 años, 11 meses
Puntos: 0
Hola, han pasado 13 días y nadie me ha podido ayudar, por favor, necesito ayuda urgente que se me acaba el plazo para entregar la web y no consigo (y creedme que he buscado y he probado de todo) y no funciona. Por favor, ayuda a un hombre desesperado por favor.
  #21 (permalink)  
Antiguo 21/05/2005, 18:58
 
Fecha de Ingreso: mayo-2005
Mensajes: 98
Antigüedad: 19 años, 1 mes
Puntos: 0
No estoy seguro pero creo que en www.asptutor.com vi algo parecido a lo que buscas, espero que te sirva ;)
  #22 (permalink)  
Antiguo 22/05/2005, 18:57
 
Fecha de Ingreso: julio-2003
Mensajes: 116
Antigüedad: 20 años, 11 meses
Puntos: 0
Gracias Moises22 por responderme, ninguno de esos buscadores me sirve, ninguno resalta palabras.

¿Alguna ayuda más, por favor?
  #23 (permalink)  
Antiguo 24/02/2006, 12:21
Avatar de sjam7  
Fecha de Ingreso: diciembre-2001
Ubicación: Guadalajara, Mexico
Mensajes: 3.672
Antigüedad: 22 años, 5 meses
Puntos: 16
Se que hace mucho de este post pero pues andaba buscando y creo que encontre la solucion, seria asi:
Código:
texto=replace(texto,request("busca"),"<strong>"&request("busca")&"</strong>",1,-1,1)
Lo unico es que si por ejemplo se busca golf y en el texto viene Golf y golf ambas las marca como golf
__________________
CreandoWebs.com
www.creandowebs.com
PLANTILLAS TEMPLATEMONSTER CON 10% DE DESCUENTO
  #24 (permalink)  
Antiguo 24/02/2006, 17:41
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Cita:
Lo unico es que si por ejemplo se busca golf y en el texto viene Golf y golf ambas las marca como golf
aaaahhh no, ahora lo pones que funcione bien o editas tu mensaje sjam7 , knarfy a lo mejor sigue buscando como hacer ese replace y se lo pasas incompleto,
  #25 (permalink)  
Antiguo 24/02/2006, 19:09
Avatar de sjam7  
Fecha de Ingreso: diciembre-2001
Ubicación: Guadalajara, Mexico
Mensajes: 3.672
Antigüedad: 22 años, 5 meses
Puntos: 16
bueno, por lo menos ya falta menos

Lo que se podria hacer es que como parte del resalte pues que ponga tambien la palabra en mayusculas, con lo que quedaria asi:
Código:
texto=replace(texto,request("busca"),"<strong>"&ucase(request("busca"))&"</strong>",1,-1,1)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:06.