Text Builder


¿Tienes una variable de texto en la que necesitas acumular una serie de valores?

Habitualmente veremos utilizar el operador + para esta acción resultando algo similar a esto:

    procedure AddText()
    var
        MyText: Text;
        I: Integer;
    begin
        for i:=1 to 25 do
        MyText := MyText + Format(I) + ';';
    end;

Vemos cómo se añade texto utilizando el operador +

MyText := MyText + Format(I) + ';';

¿Y si necesitamos incluir saltos de línea?

Entonces la cosa se complica un poco más y debemos recurrir a añadirlos "artesanalmente" utilizando los caracteres 13 y 10 para crear el famoso CRLF o salto de línea.
Algo parecido a esto:

    procedure AddText()
    var
        MyText: Text;
        I: Integer;
        CR: Char;
        LF: Char;
    begin
        CR := 13;
        LF := 10;
        for i:=1 to 25 do
        MyText += Format(I) + ';' + CR + LF;
    end;

Utilizar variables de tipo TextBuilder nos ofrece las siguientes ventajas:

  • Optimización del rendimiento. El rendimiento ofrecido por este tipo de variables mejora en mucho al ofrecido por la operación de sumar texto a una variable.
  • Simplicidad de uso. La función Append añadiría texto a nuestra variable y AppendLine añadiría texto más salto de línea al final.
  • Cómo se indica en el punto anterior, es muy sencillo incluir texto con un salto de línea al final. Por ejemplo si estamos creando el contenido de un csv.

Para el ejemplo anterior y simplemente añadir texto lo resolveríamos de esta manera:

    procedure AddText()
    var
        TxtBuilder: TextBuilder;
        I: Integer;
    begin
        for i := 1 to 25 do
            TxtBuilder.Append(Format(I) + ';');
    end;

Y en caso de necesitar un salto de línea, cambiaríamos la función Append por AppendLine

    procedure AddText()
    var
        TxtBuilder: TextBuilder;
        I: Integer;
    begin
        for i := 1 to 25 do
            TxtBuilder.AppendLine(Format(I) + ';');
    end;

y una vez finalizado el proceso de añadir texto, recuperamos el contenido de TextBuilder con el comando ToText

    procedure AddText()
    var
        TxtBuilder: TextBuilder;
        I: Integer;
    begin
        for i := 1 to 25 do
            TxtBuilder.AppendLine(Format(I) + ';');
        Message(TxtBuilder.ToText());
    end;

Algo muy sencillo, que simplificará nuestro código y que aumentará el rendimiento en nuestros procesos.
Esto nos permite exportar fácilmente ficheros csv, por ejemplo.

    procedure AddText()
    var
        TempBlob: Codeunit "Temp Blob";
        TxtBuilder: TextBuilder;
        FileName: Text;
        Ostr: OutStream;
        Istr: InStream;
        I: Integer;
    begin
        FileName := 'Numbers.csv';
        for i := 1 to 25 do
            TxtBuilder.AppendLine(Format(I) + ';');
        TempBlob.CreateOutStream(Ostr);
        Ostr.WriteText(TxtBuilder.ToText());
        TempBlob.CreateInStream(Istr);
        DownloadFromStream(Istr, '', '', '', FileName);
    end;

En esta ocasión no hay código fuente.

Nos vemos en el siguiente post.

Espero que os sea de utilidad.



Publicar un comentario

Añade comentario (0)

Artículo Anterior Artículo Siguiente