Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-12-2007
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Poder: 21
yusnerqui Va por buen camino
Parsear archivos htm de word y resaltar cadena de búsqueda

Saludos Amigos, hoy vengo a molestarlos con un par de dudas, aunque a la verdad tengo muchas, pero vamos a las que nos ocupa:

Para comenzar diré que estoy trabajando con delphi 7 y componentes Embedded Web Browser, específicamente uso el TEmbeddedWB

En el departamento donde trabajo cada cierto tiempo mandan un conjunto de resoluciones en formato word, esas resoluciones deben ser consultadas después muy a menudo para tomar decisiones, es decir que funcionan como una biblioteca de consulta, el caso es que hasta ahora, solo tienen una carpeta con todas esas resoluciones ligadas, y cuando quieren buscar algo en específico pasan el trabajo del indio, y a medida que ha ido “engordando” la carpeta más trabajo pasa el indio.

Es posible que hallan soluciones como google destop entre otras, pero esta carpeta debe ser movida constantemente en una memoria y consultada en diferentes máquinas por lo que un programa instalable no es lo más práctico en este caso.

He decidido implementar una pequeña aplicación que gestione estos documentos, y en medio de mi ignorancia lo que se me ha ocurrido es importar todas esas resoluciones a formato htm usando la función que word nos proporciona para estos fines, claro que este proceso es automatizado desde el delphi, luego muestro todos los nombres en un treeview y el contenido de la selección en el mencionado TEmbeddedWB.

Pero esto no es suficiente, estoy implementando también un buscador, que cuando el usuario introduzca una cadena de búsqueda salgan solo las resoluciones que contienen dicha cadena, para esto lo primero que se me ha ocurrido es ir abriendo uno a uno los documentos en un TrishEdit que tengo oculto y haciendo un pos de la cadena a buscar, si está lo agrego, si no pues nada. He aquí mi primer problema, no creo que esa solución sea elegante, tener un TRishEdit oculto para esas cosas, y luego que la búsqueda la hago en todo el documento incluyendo etiquetas y todo lo cual no resulta muy preciso a la hora de buscar, por lo que me gustaría saber si existe algún componente que parseara el htm (recuerden que es exportado por word) y me devuelva solo el texto para hacer la búsqueda en esa cadena.

Además después que encuentro los documentos me gustaría que al seleccionar uno aparezca las coincidencias con la cadena de búsqueda en otro formato, lo primer que se me ocurrió fue abrir con mi richedit oculto la página seleccionada y guardarla en una carpeta temporal después de haber remplazado las coincidencias con la cadena de búsqueda por ella misma pero formateada, pero esto no funciona, por algún motivo cuando voy a mostrar el documento resultante se muestran códigos raros y texto basura.

Entonces mi segunda duda sería, de que forma puedo resaltar en los documentos encontrados la cadena de búsqueda en un TEmbeddedWB.

Se que el cuento es un poco largo, pero quise que tuvieran claridad de mi problema, o tal ves los enredé más, el caso es que cualquier consejo o propuesta será bienvenida.

Agradeciendo el haber leído mi post los saluda

Yusnerqui
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo

Responder Con Cita
  #2  
Antiguo 04-12-2007
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Poder: 21
yusnerqui Va por buen camino
Hola, pues teniendo en cuenta que nadie se anima, voy a intentar subir lo que tengo hecho hasta ahora para ver si alguien le quiere hechar un ojo al código.

No está todo lo limpio y comentariado que quisiera pero está funcionando, y estoy aquí para cualquier duda que surja.

Me falta poner una pequeña ayuda, pero después del mensaje anterior no será difícil intuir lo que hace, recuerden que uso los componentes TEmbeddedWB.

Una ves más muchas gracias
Archivos Adjuntos
Tipo de Archivo: zip DSA.zip (15,2 KB, 5 visitas)
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo

Responder Con Cita
  #3  
Antiguo 05-12-2007
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Poder: 21
yusnerqui Va por buen camino
Tan mal está.

Caballero nadie se digna a(cómo decimos en cuba) tirarme un cabo
Ya leí un tutorial que se relaciona con lo que quiero, se trata de Programa tu propio google, me parece muy inrteresante lo que en él se trata, pero como dice un amigo, eso lo pondré a prueba en una refacturación del soft, por ahora sigo investigando la forma de optimizar lo que ya está hecho.

Sigo con la esperanza de que alguien se anime, si no a resolver alguna de mis dos dudas(Perdón guía de estilos), o hacer algún comentario sobre el soft.

Bueno no doy más lata, Reitero mi agradecimiento por leer mis post.

Saludos Yusnerqui
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo

Responder Con Cita
  #4  
Antiguo 06-12-2007
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Poder: 21
yusnerqui Va por buen camino
No quiero parecer pesado, pero.... Nadie me va a hacer caso?

ok, yo seguiré investigando y si consigo algo lo publico, por lo pronto tengo que pasar a otra aplicación que debo terminar antes de fin de año, ya está en sus postrimerías pero tube que detenerma para hacer el bendito buscador porque urgía su utilización.

Saludos y gracias a todos
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo

Responder Con Cita
  #5  
Antiguo 06-12-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
He aquí mi primer problema, no creo que esa solución sea elegante, tener un TRishEdit oculto para esas cosas, y luego que la búsqueda la hago en todo el documento incluyendo etiquetas y todo lo cual no resulta muy preciso a la hora de buscar, por lo que me gustaría saber si existe algún componente que parseara el htm (recuerden que es exportado por word) y me devuelva solo el texto para hacer la búsqueda en esa cadena.
Existen funciones o librerías que pueden echarte una mano: seguro. Yo usaba en cierto programa la siguiente función, aunque, reconozco que ahora mismo comenzaría buscando alguna otra cosa, no por nada, sino, porque, hace ya unos cuantos años del programa en cuestión. Tal vez incluso me parara un poco a ver:

Código Delphi [-]
function Html2Text(html : string) : string;
var
  t : TStringList;
  s, texto : string;
  i, n : Integer;
  estexto : Boolean;
begin
  t := TStringList.Create;
  try
    t.LoadFromFile(html);
    s := t.Text;
    i := 0;
    esTexto := false;
    texto := '';
    for n := 1 to Length(s) do begin
      if i > 0 then
        Dec(i)
      else
      begin
        //  
        if (s[n] = '&') and
          (Uppercase(s[n + 1]) = 'N') and
          (Uppercase(s[n + 2]) = 'B') and
          (Uppercase(s[n + 3]) = 'S') and
          (Uppercase(s[n + 4]) = 'P') and
          (Uppercase(s[n + 5]) = ';') then
        begin
          i:= 5;
          // Espacio
          texto:= texto + ' ';
        end
        else
           // "
           if (s[n] = '&') and
            (Uppercase(s[n + 1]) = 'Q') and
            (Uppercase(s[n + 2]) = 'U') and
            (Uppercase(s[n + 3]) = 'O') and
            (Uppercase(s[n + 4]) = 'T') and
            (Uppercase(s[n + 5]) = ';') then
          begin
            i:= 5;
            // Comillas
            texto:= texto + '"';
          end
          else
            if esTexto and (s[n] <> '<') then
              texto:= texto + s[n];
        if s[n] = '<' then
        begin
          esTexto:= false;
          // 
if (Uppercase(s[n + 1]) = 'B') and (Uppercase(s[n + 2]) = 'R') and (Uppercase(s[n + 3]) = '>') then // Salto de línea texto:= texto + #10; end; if s[n] = '>' then esTexto:= true; end; // if i > 0 then end; // for n := 1 to s := ''; s := texto; texto := ''; i := 0; // Eliminar las líneas en blanco for n := 1 to Length(s) do begin if i > 0 then Dec(i) else begin if (s[n] = #13) and (s[n + 1] = #10) and (s[n + 2] = #13) and (s[n + 3] = #10) then i := 1 else texto := texto + s[n]; end; end; // for n := 1 t.Text := texto; Result := t.Text; finally t.Free; end; end;

Lamento de veras no poder decir de dónde salió la función que copio, puesto que, una cosa es segura: yo no la escribí. Pero, a lo que iba, que era, comentarte que acaso no te interese el paso intermedio de convertir HTML a texto. ¿Por qué? Pues... porque no veo a nadie buscando cosas como "HTML", o "IMG", en fin, etiquetas HTML. Yo creo que el paso de HTML a texto puedes ahorrártelo, o, en principio, es lo que me parece. Pero, ya ves que existen soluciones para todo, bueno, por lo menos, para esto.

Por otro lado, y, sabiendo (aunque no sé) que desde Delphi puede trabajarse con Word... ¿por qué no hacerlo con este, directamente? O tal vez sea cuestión de que Word no va a estar disponible en todas las máquinas o algo así... sobre esto no me hagas mucho caso, la verdad. Yo me refería a mostrar Word (o el "Server" oportuno) em el formulario, y aprovecharse de las características de búsqueda conque cuente este, que digo yo que contará con ellas, vamos.

Cita:
Además después que encuentro los documentos me gustaría que al seleccionar uno aparezca las coincidencias con la cadena de búsqueda en otro formato, lo primer que se me ocurrió fue abrir con mi richedit oculto la página seleccionada y guardarla en una carpeta temporal después de haber remplazado las coincidencias con la cadena de búsqueda por ella misma pero formateada, pero esto no funciona, por algún motivo cuando voy a mostrar el documento resultante se muestran códigos raros y texto basura.
Porque estás tratando con "caracteres extraños", del formato de Word, o del propio formato HTML. Y sobre esto hay que prestar más atención. Personalmente, hace poco, traté de llevar a cabo en un programa un buscador "parecido" sobre HTML, de modo que tenía que utilizar una expresión regular (que no salió de mi cabeza) para evitar reemplazar, o hacerlo con cierto cuidado, el texto contenido entre etiquetas HTML, porque, de no hacerlo así, "rompía" dichas etiquetas, y con ello el documento HTML en cuestión.

No sé. Acaso no sería mala idea convertir el HTML a texto... y guardar el texto en una base de datos, que pudiera consultarse más o menos sencillamente, aunque, ahora que lo pienso, esto podría atacar la primera cuestión que planteas, pero, no esta segunda.
Pienso en que el Embedded WebBrowser cuente (¿Lo he soñado acaso? ¿Es que es lo que quiero recordar?) con algún método que te facilite el asunto. Si Internet Explorer puede buscar en documentos y "subrayar" lo que se busca en los mismos... tal vez tú puedas usar lo que Internet Explorer ofrezca al respecto. O sea, investigar el componente Embedded WebBrowser, aunque, qué tonterías digo, seguro que esto ya lo has hecho o estás haciéndolo...

En fin. Como veo que me estoy alargando y en realidad no aporto ninguna solución clara, lo dejo aquí, por el momento. Y lamento no poderte decir otra cosa...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 06-12-2007
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Poder: 21
yusnerqui Va por buen camino
Y es lo que siempre digo, el que persevera triunfa, te agradezco infinitamente dec por tomarte el trabajo de leer mis post, y además, por aportarme tus puntos de vista.

Ahora voy a analizar cada una de las ideas que me das para ver que extraigo de ellas

Cita:
Empezado por dec
En fin. Como veo que me estoy alargando y en realidad no aporto ninguna solución clara


Todo lo contrario, todas las ideas se agradecen, porque dos cabezas piensan más que una, y un foros de cabezas con alto nivel de preparación como las de los participantes de éste lugar, pues genera ideas maravillosas.


Reitero mi agradecimiento.

Saludos Yusnerqui
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo

Responder Con Cita
  #7  
Antiguo 06-12-2007
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Poder: 21
yusnerqui Va por buen camino
Cita:
Empezado por dec
Pienso en que el Embedded WebBrowser cuente (¿Lo he soñado acaso? ¿Es que es lo que quiero recordar?) con algún método que te facilite el asunto.
Cuanta razón llebavas, mira lo que encontré.

Gracias hermano.
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo

Responder Con Cita
  #8  
Antiguo 06-12-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bueno... la cosa es que me sonaba de algo... Pero ya queda del todo claro. Gracias a ti.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
parsear xml + clase DOMParser gustavoh JAVA 0 27-07-2006 15:39:25
Busqueda de archivos jdattoli OOP 1 26-08-2005 19:44:24
Busqueda de Archivos jorgito PHP 7 03-08-2005 18:50:04
Busqueda de archivos Nathan Varios 1 17-03-2004 17:27:38
busqueda en una cadena Irina SQL 2 20-06-2003 11:09:40


La franja horaria es GMT +2. Ahora son las 20:48:07.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi