Un saludo

| |||
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 |
| |||
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 |
| ||||
txarli te lo ha puesto muy bien.
Código:
Cuidado que igual hay alguna comilla por ahí de más o de menos, que lo he hecho sin comprobar. 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 Última edición por trasgukabi; 30/03/2005 a las 07:39 |
| |||
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 |
| |||
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 |
| ||||
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:
Un saludo 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 ![]() Txarly
__________________ ¿Por qué Uri Geller doblaba cucharas? Última edición por txarly; 30/03/2005 a las 08:56 |
| |||
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 |
| ||||
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? |
| |||
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 |
| ||||
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? |
| |||
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 |
| |||
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 |