Sign in Join
Wiki copytemporary

Revision 2 of 2, by WikiArchive on 11-8-2026. The page as it is now.

TStringList-TStrings Tutorial/es

TStringList

TStringList (o su padre TStrings) se parece mucho a una matriz dinámica o conjunto de cadenas (un conjunto de cadenas no es posible en FPC). ¡Será muy útil al programar y yo te voy a enseñar el uso básico de TstringList!

Comencemos con un ejemplo sencillo:

pascal
program StrList;
     {$mode objfpc}
      uses Classes, SysUtils;
      var ListaCadenas: TStringList;
      begin
       ListaCadenas := TStringList.Create; // Esto es necesario cuando se utiliza esta clase (o en otras clases)
       ListaCadenas.Add('¡Algo de texto!');
       WriteLn('La lista de cadenas (tstringlist) contiene ' + IntToStr(ListaCadenas.Count) + ' cadena(s).');
       ReadLn;
       ListaCadenas.Free; // Libera la memoria utilizada por esta instancia StringList
     end.

Este es un programa de consola simple que crea y agrega una cadena a una lista de cadenas. Ahora, he aquí algunas cosas que debes saber:

Ejemplo ampliado

¿Qué tal un ejemplo más jugoso, ¿eh?

pascal
program StrList2;
      {$mode ObjFPC}
      uses Classes, SysUtils;
      var ListaCadenas: TstringList;
       Cadena: String;
       Contador: Integer;
      begin
         ListaCadenas := TstringList.Create;
         Writeln('Prueba de lista de cadenas');
         repeat
            Writeln('Introduce la cadena a añadir');
               Readln(Cadena);
               if (Cadena = 'Terminar') then Halt;  // Halt detiene inmediatamente la ejecución del programa.
                // Si observas atentamente, deducirás que esto lleva a una pérdida de memoria.
               if not (Cadena = '') then
                  begin
                     Contador := ListaCadenas.Add(Cadena);
                     Writeln('¡La cadena: ' + Cadena + ' fue añadida!');
                     Writeln('El índice es: ' + IntToStr(Contador)); // El contador siempre será el índice de la última adición.
                  end
               else
                  begin
                     Writeln('No hay texto para añadir...');
                  end;
         until (Cadena = 'Terminar');
         WriteLn ('Contiene: '+ ListaCadenas.CommaText);
         ListaCadenas.Free; // Libera la memoria asignada a ListaCadenas.
      end.

Sin embargo, para evitar posibles pérdidas de memoria, deberíamos utilizar el bloque try - finally siempre que sea posible. Pareciéndose a lo siguiente:

pascal
var
      slist: TStringList;
     
    ...
     
    slist := TStringList.Create;
    try
      ...
      // realizar cosas con stringlist  
      ...
    finally
      if Assigned(slist) then
        FreeAndNil(slist);
    end;
pascal
// Este otro funciona perfecto, no hay doble creación de Stringlist... cualquier comentario a edgarrod71@gmail.com
    function theStringList: TStringList;
    var
     J: integer;
    begin
      result := TStringList.Create;
      for J:=0 to 10 do  // son 11 elementos
        result.add(intToStr(J));
    end;
     
    procedure Caller;
    var
      SL: TStringList;
      K: integer;
    begin
      SL := theStringList;
      for K:=0 to pred(SL.Count) do   // son 11 elementos
        writeln(SL[K]);
      if assigned(SL) then    // aquí se evita desperdicio de memoria
        SL.Free;
    end;

Usando archivos

Cuando se utiliza TStringList tenemos dos procedimientos de manipulación de archivos: SaveToFile y LoadFromFile.

pascal
program StrListFile;
     {$mode objfpc}
     uses
     Classes, SysUtils;
     var
      ListaCadenas: TStringList;
       begin
        ListaCadenas := TStringList.Create;
           try
              ListaCadenas.LoadFromFile('Algo_de_Texto_en_Archivo.txt');
              ListaCadenas.Add('Hola');
              ListaCadenas.SaveToFile('Algo_de_Texto_en_Archivo.txt');
           finally
              ListaCadenas.Free;
       end;
    end.

¡Acabamos de abrir un archivo, hemos editado el texto y lo hemos guardado de nuevo¡

Comparación dinámica de matrices de cadenas

TStringList es simplemente una versión orientada a objetos de una matriz de cadena dinámica. Algunos métodos son análogos:

Operación Matriz de cadenas TStringList
Declaración de Variable ListaCadenas: array of string; ListaCadenas: TStringList;
Inicialización constructor implícito ListaCadenas := TStringList.Create
Dimensionar SetLength(ListaCadenas, X); ListaCadenas.Size := X;
Obtener dimensión X := Length(ListaCadenas); X := ListaCadenas.Count;
Añadir elemento SetLength(ListaCadenas, Length(ListaCadenas) + 1); ListaCadenas[Length(ListaCadenas) - 1] := X; ListaCadenas.Add(X);
Borrar item for I := Index to Length(ListaCadenas) - 2 do ListaCadenas[I] := ListaCadenas[I + 1]; SetLength(ListaCadenas, Length(ListaCadenas) - 1); ListaCadenas.Delete(Index);
Eliminar todos los items SetLength(ListaCadenas, 0); ListaCadenas.Clear;
Terminación destructor implícito ListaCadenas.Free;

Sin embargo TStringList ofrece mucha mas funcionalidad que una simple estructura del tipo matriz dinámica.

Sigue aprendiendo

TStringList tiene algunas características interesantes adicionales:

Para aprender los diferentes procedimientos, funciones y propiedades, puedes ver Documentación de TStringList

Si sientes que podría haber dejado algo fuera,'modificalo a voluntad!'

¡Espero que sea de ayuda!

Ver además:


From the Free Pascal wiki, page "TStringList-TStrings Tutorial/es", as the Internet Archive kept it on 2026-02-07, last changed on 2025-09-09. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.