Ver Mensaje Individual
  #11  
Antiguo 25-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
Reputación: 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 HTMLEspaciado

¡Hola de nuevo!

Comprobé que si es necesario un « » por cada espacio del prefijo y del sufijo del valor String que se encuentra entre etiquetas.

Juan:

Desarrollé una función de nombre HTMLEspaciado que nos permite solucionar este tipo de casos. He aquí el código:
Código Delphi [-]
...
implementation

{$R *.dfm}

Uses
  StrUtils;

Function HTMLEspaciado (Const Cadena :String;
  Const IndicadorTemporal :Char = #255) :String;
Var
  Incremento, Indice, Ultimo :Integer;
  CaracterEtiqueta :Char;  { Carácter de Etiqueta }

  Procedure Espaciar;
  Var
    CaracterBuscado :Char;  { Carácter Buscado }
  Begin
    CaracterBuscado := CaracterEtiqueta;

    Repeat
      If Result [Indice] = CaracterBuscado Then
        If CaracterBuscado = CaracterEtiqueta Then
          CaracterBuscado := ' '
        Else
          Result [Indice] := IndicadorTemporal
      Else
        If CaracterBuscado = ' ' Then
          CaracterBuscado := CaracterEtiqueta;

      Inc (Indice, Incremento);
    Until Indice = Ultimo;
  End;
Begin
  Result := Cadena;

  If Result = '' Then
    Exit;

  CaracterEtiqueta := '>';
  Indice := 1;
  Incremento := 1;
  Ultimo := Length (Cadena);
  Espaciar;
  CaracterEtiqueta := '<';
  Indice := Length (Cadena);
  Incremento := -1;
  Ultimo := 1;
  Espaciar;
  Result := ANSIReplaceStr (Result, IndicadorTemporal, '&' + 'nbsp;');
End;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit2.Text := HTMLEspaciado (Edit1.Text);
end;
...
NOTA: En la línea «Result := ANSIReplaceStr...» separé la expresión '&nbsp;' en dos partes, para evitar un problema de interpretación HTML encontrado al exponer dicha expresión en formato de código Delphi. Para su utilización real no es necesario que dicha expresión esté separada.

La función HTMLEspaciado asume que todos los símbolos de menor que (<) y mayor que (>) de la cadena dada son delimitadores de etiquetas HTML, y ninguno de ellos parte de un valor que literalmente contenga esos símbolos, ya que para ello se utilizan los códigos especiales «&lt;» y «&gt;».

Realicé varias pruebas. En una de ellas introduzco la cadena '<Etiqueta de prueba> Cien Años De Soledad </Etiqueta de prueba>' en Edit1, con dos espacios a cada lado de la subcadena 'Cien Años De Soledad'. Al oprimir el botón Button1, queda en Edit2 la cadena resultante '<Etiqueta de prueba>&nbsp;&nbsp;Cien Años De Soledad&nbsp;&nbsp;</Etiqueta de prueba>'.

Es posible que tengamos que hacer más pruebas, o añadir funcionalidad extra a la rutina, pero creo que por lo pronto tenemos un avance importante.

Estoy considerando incluir esta función en la biblioteca Interfaz GH, porque me parece una necesidad relativamente común esto de "espaciar" valores HTML.

Espero esto sea de utilidad, seguimos en contacto.

Al González.
Responder Con Cita