Sign in Join
Wiki copytemporary

Revision 1 of 2, by Trev on 3-2-2020. 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.CommanText);
     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 it stood on 2020-03-02 after a change by Trev, out of the wiki's dump of 2024-05-26. 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.