Ver Mensaje Individual
  #13  
Antiguo 29-04-2005
Avatar de JuanBCT
JuanBCT JuanBCT is offline
Miembro
 
Registrado: ago 2004
Ubicación: Campana, Argentina
Posts: 57
Reputación: 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