Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #5  
Antiguo 06-12-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
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
 



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 16:23:28.


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