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

buscar y reemplazar palabras en un texto

Estas en el tema de buscar y reemplazar palabras en un texto en el foro de ASP Clásico en Foros del Web. Hola muy buenas, haber veamos tengo un texto que sale de una base de datos y necesito que cuando exista una palabra en este texto ...
  #1 (permalink)  
Antiguo 30/03/2005, 02:41
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 23 años, 3 meses
Puntos: 2
buscar y reemplazar palabras en un texto

Hola muy buenas, haber veamos tengo un texto que sale de una base de datos y necesito que cuando exista una palabra en este texto que este dentro de mi base de datos, básicamente dos tablas, que me las sustituya por enlaces. La verdad es que me estoy liando un poco con esto, lo que e echo a sido meter el texto dentro de un split, pero claro esto funciona con las palabras simples, pero y con las compuestas?, nu se, estoy perdido, alguna ayudita??

Un saludo
__________________
asp, php, .net, adaptandose a las necesidades
  #2 (permalink)  
Antiguo 30/03/2005, 03:23
Avatar de txarly  
Fecha de Ingreso: marzo-2003
Ubicación: Eibar (Gipuzkoa)
Mensajes: 455
Antigüedad: 22 años, 2 meses
Puntos: 2
Podrias utilizar la función Replace de la siguiente forma:

textoBDmodificado = Replace(textoBDoriginal, "palabra buscada", "<A HREF='otrapagina.asp'>palabra buscada</A>")

Un saludo
Txarly
__________________
¿Por qué Uri Geller doblaba cucharas?
  #3 (permalink)  
Antiguo 30/03/2005, 04:39
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 23 años, 3 meses
Puntos: 2
El problema es que no es solo una palabra sino que me tiene que coger los datos de la base de datos es decir lo que tendría que hacer es comparar mi texto con cada una de los autores y temas qeu tengo en mi base de datos y si hay alguno que coincida entonces que me sustituya esa palabra por un enlace.

En mi base de datos tengo por ejemplo estas palabras, al qeu le corresponde un id determinado para que al pinchar el enlace pueda ver la informacion contenida en mi BD, estos datos saldrían de la tabla contenido del campo conceptos (a esto le tendría que pasar el campo id, para saber exactamente a que me hace referencia), así qeu las palabras serían:

Guerra Mundial, Albéniz, impresionismo, Fauré

y el texto sería (este texto sale de la tabla conceptos del campo textos):

Nace tras la Primera Guerra Mundial, y se desarrolla en la década de los 20 y los 30. Representa el mantenimiento de lo académico frente a los nuevos estilos. Frente al romanticismo o el impresionismo, se promueven los principios de objetividad, frialdad: la música absoluta. La escuela más importante es la francesa, con autores como Saint Saens, Fauré, Ravel.

Lo qeu necesitaría es que me buscara esas palabras en el texto y que si las encuentra qeu las sustituya por enlaces.

No se si ahora esta un poquito más claro

Un saludo
__________________
asp, php, .net, adaptandose a las necesidades
  #4 (permalink)  
Antiguo 30/03/2005, 07:37
Avatar de trasgukabi  
Fecha de Ingreso: septiembre-2004
Mensajes: 2.749
Antigüedad: 20 años, 8 meses
Puntos: 18
txarli te lo ha puesto muy bien.
Código:
texto="loquesea"
Abrir recordset con palabras
do while not rs.eof
textoconenlaces=replace(texto,rs("palabra"),"<a href='ver_enlace.asp?idpalabra="&rs("id_palabra")&"'>"&rs("palabra")&"</a>")
rs.movenext
loop
response.write textoconenlaces
Cuidado que igual hay alguna comilla por ahí de más o de menos, que lo he hecho sin comprobar.

Última edición por trasgukabi; 30/03/2005 a las 07:39
  #5 (permalink)  
Antiguo 30/03/2005, 08:32
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 23 años, 3 meses
Puntos: 2
Pues no se que decirte, ya que yo lo había echo de esa forma pensando que iba a funcionar pero no funciona por eso se me había ocurrido partir el texto en palabras y hacer la comparación, pero creo qeu no es la mejor forma, por lo menos no funciona con los datos sacados desde la base de datos, en cambio si pongo una palabra entonces si que me cambia

La cosa sale cuando en vez de ponerlo como me comentas, lo pongo así:

texto="loquesea"
Abrir recordset con palabras
do while not rs.eof
textoconenlaces=replace(texto,rs("palabra"),"<a href='ver_enlace.asp?idpalabra="&rs("id_palabra")& "'>"&rs("palabra")&"</a>")

response.write textoconenlaces

rs.movenext
loop

pero claro de esta forma me repite el texto tantas veces como palabras teng en mi base de datos

Un saludo
__________________
asp, php, .net, adaptandose a las necesidades

Última edición por haven; 30/03/2005 a las 08:36
  #6 (permalink)  
Antiguo 30/03/2005, 08:37
Avatar de trasgukabi  
Fecha de Ingreso: septiembre-2004
Mensajes: 2.749
Antigüedad: 20 años, 8 meses
Puntos: 18
Lo has hecho EXACTAMENTE igual y no ha funcionado?
pon el código
  #7 (permalink)  
Antiguo 30/03/2005, 08:43
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 23 años, 3 meses
Puntos: 2
La conexion a la base:

set RSmenu5=Server.CreateObject("ADODB.Recordset")
SQLmenu5="SELECT * FROM textos where CONCEPTO = '"&RSmenu4("concepto")&"'"

RSmenu5.Open SQLmenu5, Conn

set RSbuscarart=Server.CreateObject("ADODB.Recordset")
SQLbuscarart="SELECT * FROM artistas"

RSbuscarart.Open SQLbuscarart, Connart

el código:

texto = RSmenu5("TEXTOS")

do while not RSbuscarart.eof

textoconenlaces = replace(texto,RSbuscarart("apellido1"),"<a href='ver_enlace.asp?idpalabra="&RSbuscarart("id") &"'>"&RSbuscarart("apellido1")&"</a>")


RSbuscarart.MoveNext
loop

response.write textoconenlaces

Como ves es lo mismo, no me da ningún error pero no aparecen los enlaces, en cambio si pongo el response.write textoconenlaces dentro del loop si aparecen pero claro el texto se multiplica por el numero de palabras que tengo en la base.

Un saludo
__________________
asp, php, .net, adaptandose a las necesidades
  #8 (permalink)  
Antiguo 30/03/2005, 08:46
Avatar de txarly  
Fecha de Ingreso: marzo-2003
Ubicación: Eibar (Gipuzkoa)
Mensajes: 455
Antigüedad: 22 años, 2 meses
Puntos: 2
Bueno, creo que más o menos te voy entendiendo.
Entonces la idea del split me parece buena:
- Partes de la cadena "Guerra Mundial, Albéniz, impresionismo, Fauré"
- Haces un split tomando como separador la coma, haces trim para eliminar espacios del principio y el final.
- Recorres el array generado a partir de la cadena
- Buscas cada uno de los trozos en el texto "Guerra Mundial", Albéniz, ....
- Sustituyes con la función replace la palabra buscada por el enlace, sacando de base de datos lo que necesites.

Código:
Array_st = Split(Cadena, ",")
For i = 0 To UBound(Array_st)
   strCadena = Trim(Array_st(i))
   textoBDmodificado = Replace(textoBDoriginal, strCadena, "<A HREF='otrapagina.asp?id=xxx'>" & strCadena & "</A>") 

Next
Un saludo
Txarly
__________________
¿Por qué Uri Geller doblaba cucharas?

Última edición por txarly; 30/03/2005 a las 08:56
  #9 (permalink)  
Antiguo 30/03/2005, 08:53
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 23 años, 3 meses
Puntos: 2
Hola muy buenas, yo lo qeu habia echo había sido coger el texto y ponerlo en el split cogiendo como separador el " " ya que los datos de Guerra Mundial, Albéniz, impresionismo, Fauré, se recogen directamente de la base ya que son del tipo,

id-nombre-apellido1-apellido2-textoexplicativo

así que recorro el split y comparo los terminos qeu aparecen en mi texto con la base, el problema aparece cuando las palabras son compuestas.

el poner el response.write textoconenlaces, despues del loop implica que te coge solo el último termino que hay en la base de datos no la suma total de todos los elementos.

No se igual es la mar de sencillo y me estoy liando solo, jeje
__________________
asp, php, .net, adaptandose a las necesidades
  #10 (permalink)  
Antiguo 30/03/2005, 08:59
Avatar de txarly  
Fecha de Ingreso: marzo-2003
Ubicación: Eibar (Gipuzkoa)
Mensajes: 455
Antigüedad: 22 años, 2 meses
Puntos: 2
Claro, si cojes como separador el " " te fallara con las palabras compuestas.
Y porque quieres solo el ultimo enlace? no tendria mas sentido todos los textos que buscas?
__________________
¿Por qué Uri Geller doblaba cucharas?
  #11 (permalink)  
Antiguo 30/03/2005, 09:04
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 23 años, 3 meses
Puntos: 2
no, yo no quiero el ultimo enlace, quiero todos, peor no salen los jodidos, jeje, voy a probar a poner todas las palabras de mi base en un cadena separada por comas y la leto a un split haber si así sale.

Un saludo
__________________
asp, php, .net, adaptandose a las necesidades
  #12 (permalink)  
Antiguo 30/03/2005, 09:07
Avatar de txarly  
Fecha de Ingreso: marzo-2003
Ubicación: Eibar (Gipuzkoa)
Mensajes: 455
Antigüedad: 22 años, 2 meses
Puntos: 2
ok, pues sigue el ejemplo que te puse más arriba y de esa forma tambien irá bien con las jodidas jeje... supongo que llamas así a las palabras compuestas
__________________
¿Por qué Uri Geller doblaba cucharas?
  #13 (permalink)  
Antiguo 30/03/2005, 09:38
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 23 años, 3 meses
Puntos: 2
Vale ya esta la cuestion era que no guardabamos el resultado de la primera consulta para que buscaría despues a partir de esa ultima, bueno el codigo queda así

n = 0
do while not RSbuscarart.eof
n = n + 1

if n = 1 then
texto = RSmenu5("TEXTOS")
else
texto = textoconenlaces
end if

textoconenlaces = replace(texto,RSbuscarart("apellido1"),"<a href='ver_enlace.asp?idpalabra="&RSbuscarart("id") &"'>"&RSbuscarart("apellido1")&"</a>")


RSbuscarart.MoveNext
loop

response.write textoconenlaces

Un saludo
__________________
asp, php, .net, adaptandose a las necesidades
  #14 (permalink)  
Antiguo 30/03/2005, 10:03
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 23 años, 3 meses
Puntos: 2
Una cuestion hay alguna posibilidad de decirle que me coja la palabra exacta??? ya que si en mi base existe la palabra roma, cuando me mira el texto y encuentra la palabra romanticismo entonces lo qeu hace es poner enlace en <a href="">roma</a>nticismo

Un saludo
__________________
asp, php, .net, adaptandose a las necesidades
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 08:04.