Copia del wikiespejo

Este es un espejo del wiki de pascal.chat. La edición, el historial y el inicio de sesión están allí.

TStringList-TStrings Tutorial/es

Deutsch · English · Español · Français · Polski · Suomi · Русский

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.

Revisión 2, último cambio por WikiArchive .