Difference between revisions of "TStringList-TStrings Tutorial/es"
m (moved TString List-TString Tutorial/es to TStringList-TStrings Tutorial/es: wrong name) |
|||
Line 3: | Line 3: | ||
==TStringList== | ==TStringList== | ||
− | TStringList (o TStrings) se parece mucho a | + | 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: | ||
+ | |||
<syntaxhighlight> program StrList; | <syntaxhighlight> program StrList; | ||
{$mode objfpc} | {$mode objfpc} | ||
uses Classes, SysUtils; | uses Classes, SysUtils; | ||
− | var ListaCadenas: | + | var ListaCadenas: TStringList; |
begin | begin | ||
− | ListaCadenas := TStringList.Create; // Esto es necesario cuando se utiliza esta clase ( | + | ListaCadenas := TStringList.Create; // Esto es necesario cuando se utiliza esta clase (o en otras clases) |
ListaCadenas.Add('¡Algo de texto!'); | 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.</syntaxhighlight> | end.</syntaxhighlight> | ||
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: | 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: | ||
− | *'''Create''' - Creará la lista de cadenas para modificar. | + | *'''Create''' - Creará la lista de cadenas para modificar. Al utilizar Create hay que utilizar posteriormente Free para liberar la memoria que ocupa cuando ya no se utilice. Es importante porque aunque no hará cascar el programa si que contribuirá a dejarnos sin memoria en el sistema. |
− | *'''Count''' - | + | *'''Count''' - Esta propiedad es un contador para el número de cadenas en la Lista. |
− | *'''Add''' - | + | *'''Add''' - Este método nos permite añadir una cadena a la lista de cadenas. La función devolverá el índice de la cadena. Aquí es donde el contador viene muy bien. |
− | *'''Delete''' - Borra una cadena de la lista de cadenas. Debemos de saber que no debemos introducir la cadena, tenemos que introducir el índice de la cadena. Como he dicho: es como una matriz dinámica de lujo. | + | *'''Delete''' - Borra una cadena de la lista de cadenas. Debemos de saber que no debemos simplemente introducir la cadena, tenemos que introducir el índice de la cadena. Como he dicho: es como una matriz dinámica de lujo. |
*'''IndexOf''' - Devolverá el índice de la cadena en la lista. Si no lo encuentra, devuelve -1. | *'''IndexOf''' - Devolverá el índice de la cadena en la lista. Si no lo encuentra, devuelve -1. | ||
*'''Clear''' - Borrará la lista completa | *'''Clear''' - Borrará la lista completa | ||
− | ===Ejemplo=== | + | ===Ejemplo ampliado=== |
¿Qué tal un ejemplo más jugoso, ¿eh? | ¿Qué tal un ejemplo más jugoso, ¿eh? | ||
Line 31: | Line 35: | ||
uses Classes, SysUtils; | uses Classes, SysUtils; | ||
var ListaCadenas: TstringList; | var ListaCadenas: TstringList; | ||
− | + | Cadena: String; | |
Contador: Integer; | Contador: Integer; | ||
begin | 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(C); | |
− | + | 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.</syntaxhighlight> | end.</syntaxhighlight> | ||
Revision as of 10:29, 27 January 2015
│
Deutsch (de) │
English (en) │
español (es) │
suomi (fi) │
français (fr) │
polski (pl) │
русский (ru) │
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:
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:
- Create - Creará la lista de cadenas para modificar. Al utilizar Create hay que utilizar posteriormente Free para liberar la memoria que ocupa cuando ya no se utilice. Es importante porque aunque no hará cascar el programa si que contribuirá a dejarnos sin memoria en el sistema.
- Count - Esta propiedad es un contador para el número de cadenas en la Lista.
- Add - Este método nos permite añadir una cadena a la lista de cadenas. La función devolverá el índice de la cadena. Aquí es donde el contador viene muy bien.
- Delete - Borra una cadena de la lista de cadenas. Debemos de saber que no debemos simplemente introducir la cadena, tenemos que introducir el índice de la cadena. Como he dicho: es como una matriz dinámica de lujo.
- IndexOf - Devolverá el índice de la cadena en la lista. Si no lo encuentra, devuelve -1.
- Clear - Borrará la lista completa
Ejemplo ampliado
¿Qué tal un ejemplo más jugoso, ¿eh?
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(C);
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.
Usando archivos
Cuando se utiliza TStringList tenemos dos procedimientos de manipulación de archivos: SaveToFile y LoadFromFile.
- SaveToFile guardará todas las cadenas en la lista en un archivo.
- LoadFromFile abrirá el archivo y agregará los datos del archivo a la cadena de la lista de cadenas.
program StrListFile;
{$mode objfpc}
uses
Classes, SysUtils;
var
ListaCadenas: TStringList;
begin
ListaCadenas := TStringList.Create;
ListaCadenas.LoadFromFile('Algo_de_Texto_en_Archivo.txt');
ListaCadenas.Add('Hola');
ListaCadenas.SaveToFile('Algo_de_Texto_en_Archivo.txt');
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 avanzada, de objeto, 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; |
Pero TStringList ofrece mucha mas funcionalidad que una simple estructura como la matriz dinámica.
Sigue aprendiendo
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!