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 29-04-2005
Avatar de JuanBCT
JuanBCT JuanBCT is offline
Miembro
 
Registrado: ago 2004
Ubicación: Campana, Argentina
Posts: 57
Poder: 20
JuanBCT Va por buen camino
Hola Al! Ante todo, mil disculpas a todos por lo que demoré en responder.
Traté de usar tu función pero no me funcionó, creo que porque uso Delphi 5 (no me encontraba la librería strutils; la q descubrí que se halla en las librerías rxlib - pero la versión de Delphi 5 de estas no traían la procedure de ANSIReplaceStr).
Igualmente, gracias a las ideas q uds. aportaron, se me ocurrió hacerlo de esta forma:

1) Leo cada línea del HTML con un for, y busco caracter='>' y caracter[i+1]=' '.
2) En una variable guardo la posición donde se encuentra el primer ' ' (la llamé istart) y voy buscando a ver si los siguientes también son espacio, cada vez q pasa guardo la posición en iend (al final va a tener la posición del último espacio antes de la primer letra).
3) Corto el string en dos, y los guardo en archivos temporales: Uno es desde el principio del string hasta la posición del último caracter antes del espacio, otro es desde el último espacio hasta el final del string ( Length(String) ).
4) Me olvidé de decir antes que guardé la cantidad de espacios en otra variable, asi que hago lo siguiente: En otro string mas [i]pego la primer parte, luego inserto tantos '&nbsp' como el contador de espacios tenga, luego pego la segunda parte que tenía cortada.

Es básicamente eso. Seguramente se puede hacer de forma más eficiente, sin tantos strings temporales y código; pero bueno, lo fuí haciendo sobre la marcha, funciona bastante rápido.... aparte soy medio cavernícola para programar!!!

Bueno, les muestro la parte del código que hice, les agradezco infinitamente a todos por su tiempo.
Aquí va:

Código Delphi [-]
 //Archiv es el stringlist en donde cargué el HTML
SS:=archiv.Strings[A];
//==========================================================================
// :: RUTINA - AGREGADO DE "&nbsp"
//Busco los primeros espacios luego del > que no tenga como próximo un <, y
//reemplazo por &nbsp
//==========================================================================
//1) Voy a tener dos variables integer: istart, iend. Ahí voy a guardar las
// posiciones dentro del string donde empiezan los espacios en la línea
// y donde terminan.
// Entonces: Leo y pregunto si el caracter es ">":
//==========================================================================
for indicess:=0 to Length(SS) -1 do
  begin
  if (SS[indicess]='>') then
    begin
    if (SS[indicess+1]=' ') then
     begin
     istart:=indicess;
     indice2:=indicess;
     //Paso a usar otro indice, "indice2" para localizar donde empieza el caracter
    while indice2<>iend do
    begin
      indice2:=indice2 + 1;
        if (SS[indice2]<>' ') then
          begin
            iend:=indice2;
          end;
    end;
end;
//Ahora, a partir de que encontré el primer espacio y grabé el comienzo;
//sigo leyendo y grabo el final cada vez que encuentre otro espacio...
end;
end;
//==========================================================================
//2)Ok, después de todo esto me quedo con dos valores, ISTART e IEND.
//LA CANTIDAD DE ESPACIOS QUE TENGO QUE INSERTAR ES (IEND-ISTART-1)
//Calculemosla:
cantinst:=(iend-istart-1);
//Bien, ahora insertemos a partir del istart la cantidad cantinst de &nbsp
//O más facil aún: Copio el string desde el principio hasta ISTART y la
//grabo en un string temporal, STA. También copio el string desde IEND hasta
//Length(SS) y la paso a STB.
//Ahora, armo STFINAL así: Copio STA
// Concateno '&nbsp' CANTINST veces
// Concateno STB
// Y listo!
// Entonces:
sta:=Copy(SS,0,istart);
stb:=Copy(SS,iend,Length(SS));
stfinal:=sta;
for indice3:=0 to cantinst -1 do
  begin
    stfinal:=stfinal+'&nbsp';
  end;
stfinal:=stfinal + stb;
SS:=stfinal;

Saludos!!!!!!

Última edición por JuanBCT fecha: 29-04-2005 a las 22:26:04. Razón: 'horror' ortográfico
Responder Con Cita
  #2  
Antiguo 29-04-2005
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile

¡Buen día a todos!

Cita:
Empezado por JuanBCT
...Traté de usar tu función pero no me funcionó, creo que porque uso Delphi 5 (no me encontraba la librería strutils; la q descubrí que se halla en las librerías rxlib - pero la versión de Delphi 5 de estas no traían la procedure de ANSIReplaceStr).
Hice la función HTMLEspaciado utilizando Delphi 7, versión donde se encuentra de forma nativa una unidad llamada StrUils, la cual contiene a la función ANSIReplaceStr.

Para compilarlo en Delphi 5, creo que bastaría susituir la llamada a ANSIReplaceStr por alguna otra función que sirva para reemplazar subcadenas, como StringReplace (no recuerdo si viene en Delphi 5) o alguna otra.

Cita:
Empezado por JuanBCT
...Seguramente se puede hacer de forma más eficiente, sin tantos strings temporales y código...
Así es, con HTMLEspaciado (con las adaptaciones necesarias para Delphi 5, si son tan amables de ayudarnos los demás compañeros del foro ), por poner un ejemplo.

Gracias por mantenernos informado.

¡Un abrazo!

Al González.

P.D. ¿Podrían insertar algunos saltos de línea para leer adecuadamente este hilo en resolución de 800 X 600 pixeles? Gracias.
Responder Con Cita
  #3  
Antiguo 29-04-2005
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Te resulto muy dificil lo de las expresiones regulares? Era solo cuestion de bajar un componente y dos lineas/tres a lo sumo de codigo.... y cubre mas casos que las funciones a mano expuestas...
__________________
El malabarista.
Responder Con Cita
  #4  
Antiguo 02-05-2005
Avatar de JuanBCT
JuanBCT JuanBCT is offline
Miembro
 
Registrado: ago 2004
Ubicación: Campana, Argentina
Posts: 57
Poder: 20
JuanBCT Va por buen camino
Hola Mario!

Como lo tenía mas o menos a medio hacer no consideré lo de las expresiones regulares, ahora que tengo un poco de tiempo lo voy a probar...
Después te comento como me fué.

Gracias, y saludos!
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


La franja horaria es GMT +2. Ahora son las 04:55:03.


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