Sign in Join
Wiki copytemporary

TStringList-TStrings Tutorial/es: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11## TStringList
22
3-   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!
4-
5-Comencemos con un ejemplo sencillo:
3+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!
64
7-``` pascal
8- program StrList;
9- {$mode objfpc}
10- uses Classes, SysUtils;
11- var ListaCadenas: TStringList;
12- begin
13- ListaCadenas := TStringList.Create; // Esto es necesario cuando se utiliza esta clase (o en otras clases)
14- ListaCadenas.Add('¡Algo de texto!');
15- WriteLn('La lista de cadenas (tstringlist) contiene ' + IntToStr(ListaCadenas.Count) + ' cadena(s).');
16- ReadLn;
17- ListaCadenas.Free; // Libera la memoria utilizada por esta instancia StringList
18- end.
5+Comencemos con un ejemplo sencillo:
196```
7+program StrList;
8+ {$mode objfpc}
9+ uses Classes, SysUtils;
10+ var ListaCadenas: TStringList;
11+ begin
12+ ListaCadenas := TStringList.Create; // Esto es necesario cuando se utiliza esta clase (o en otras clases)
13+ ListaCadenas.Add('¡Algo de texto!');
14+ WriteLn('La lista de cadenas (tstringlist) contiene ' + IntToStr(ListaCadenas.Count) + ' cadena(s).');
15+ ReadLn;
16+ ListaCadenas.Free; // Libera la memoria utilizada por esta instancia StringList
17+ end.
18+```
2019
21-   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:
20+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:
2221
23-- **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.
24-- **Count** - Esta propiedad es un contador para el número de cadenas en la Lista.
25-- **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.
26-- **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.
27-- **IndexOf** - Devolverá el índice de la cadena en la lista. Si no lo encuentra, devuelve -1.
28-- **Clear** - Borrará la lista completa
22+ * **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.
23+ * **Count** \- Esta propiedad es un contador para el número de cadenas en la Lista.
24+ * **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.
25+ * **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.
26+ * **IndexOf** \- Devolverá el índice de la cadena en la lista. Si no lo encuentra, devuelve -1.
27+ * **Clear** \- Borrará la lista completa
2928
3029### Ejemplo ampliado
3130
32-   ¿Qué tal un ejemplo más jugoso, ¿eh?
33-
34-``` pascal
35- program StrList2;
36- {$mode ObjFPC}
37- uses Classes, SysUtils;
38- var ListaCadenas: TstringList;
39- Cadena: String;
40- Contador: Integer;
41- begin
42- ListaCadenas := TstringList.Create;
43- Writeln('Prueba de lista de cadenas');
44- repeat
45- Writeln('Introduce la cadena a añadir');
46- Readln(Cadena);
47- if (Cadena = 'Terminar') then Halt; // Halt detiene inmediatamente la ejecución del programa.
48- // Si observas atentamente, deducirás que esto lleva a una pérdida de memoria.
49- if not (Cadena = '') then
50- begin
51- Contador := ListaCadenas.Add(Cadena);
52- Writeln('¡La cadena: ' + Cadena + ' fue añadida!');
53- Writeln('El índice es: ' + IntToStr(Contador)); // El contador siempre será el índice de la última adición.
54- end
55- else
56- begin
57- Writeln('No hay texto para añadir...');
58- end;
59- until (Cadena = 'Terminar');
60- WriteLn ('Contiene: '+ ListaCadenas.CommanText);
61- ListaCadenas.Free; // Libera la memoria asignada a ListaCadenas.
62- end.
31+¿Qué tal un ejemplo más jugoso, ¿eh?
6332```
64-
65-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:
33+program StrList2;
34+ {$mode ObjFPC}
35+ uses Classes, SysUtils;
36+ var ListaCadenas: TstringList;
37+ Cadena: String;
38+ Contador: Integer;
39+ begin
40+ ListaCadenas := TstringList.Create;
41+ Writeln('Prueba de lista de cadenas');
42+ repeat
43+ Writeln('Introduce la cadena a añadir');
44+ Readln(Cadena);
45+ if (Cadena = 'Terminar') then Halt; // Halt detiene inmediatamente la ejecución del programa.
46+ // Si observas atentamente, deducirás que esto lleva a una pérdida de memoria.
47+ if not (Cadena = '') then
48+ begin
49+ Contador := ListaCadenas.Add(Cadena);
50+ Writeln('¡La cadena: ' + Cadena + ' fue añadida!');
51+ Writeln('El índice es: ' + IntToStr(Contador)); // El contador siempre será el índice de la última adición.
52+ end
53+ else
54+ begin
55+ Writeln('No hay texto para añadir...');
56+ end;
57+ until (Cadena = 'Terminar');
58+ WriteLn ('Contiene: '+ ListaCadenas.CommaText);
59+ ListaCadenas.Free; // Libera la memoria asignada a ListaCadenas.
60+ end.
61+```
6662
67-``` pascal
68-
69-
63+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:
64+```
7065var
71- slist: TStringList;
72-
73-...
74-
75-slist := TStringList.Create;
76-try
77- ...
78- // realizar cosas con stringlist
79- ...
80-finally
81- if Assigned(slist) then
82- FreeAndNil(slist);
83-end;
66+ slist: TStringList;
67+
68+ ...
69+
70+ slist := TStringList.Create;
71+ try
72+ ...
73+ // realizar cosas con stringlist
74+ ...
75+ finally
76+ if Assigned(slist) then
77+ FreeAndNil(slist);
78+ end;
8479```
85-
86-``` pascal
80+```
8781// Este otro funciona perfecto, no hay doble creación de Stringlist... cualquier comentario a edgarrod71@gmail.com
88-function theStringList: TStringList;
89-var
90- J: integer;
91-begin
92- result := TStringList.Create;
93- for J:=0 to 10 do // son 11 elementos
94- result.add(intToStr(J));
95-end;
96-
97-procedure Caller;
98-var
99- SL: TStringList;
100- K: integer;
101-begin
102- SL := theStringList;
103- for K:=0 to pred(SL.Count) do // son 11 elementos
104- writeln(SL[K]);
105- if assigned(SL) then // aquí se evita desperdicio de memoria
106- SL.Free;
107-end;
82+ function theStringList: TStringList;
83+ var
84+ J: integer;
85+ begin
86+ result := TStringList.Create;
87+ for J:=0 to 10 do // son 11 elementos
88+ result.add(intToStr(J));
89+ end;
90+
91+ procedure Caller;
92+ var
93+ SL: TStringList;
94+ K: integer;
95+ begin
96+ SL := theStringList;
97+ for K:=0 to pred(SL.Count) do // son 11 elementos
98+ writeln(SL[K]);
99+ if assigned(SL) then // aquí se evita desperdicio de memoria
100+ SL.Free;
101+ end;
108102```
109103
110104## Usando archivos
111105
112-   Cuando se utiliza TStringList tenemos dos procedimientos de manipulación de archivos: SaveToFile y LoadFromFile.
106+Cuando se utiliza TStringList tenemos dos procedimientos de manipulación de archivos: SaveToFile y LoadFromFile.
113107
114-- *SaveToFile* guardará todas las cadenas en la lista en un archivo.
115-- *LoadFromFile* abrirá el archivo y agregará los datos del archivo a la cadena de la lista de cadenas.
108+ * _SaveToFile_ guardará todas las cadenas en la lista en un archivo.
109+ * _LoadFromFile_ abrirá el archivo y agregará los datos del archivo a la cadena de la lista de cadenas.
116110
117-``` pascal
118- program StrListFile;
119- {$mode objfpc}
120- uses
121- Classes, SysUtils;
122- var
123- ListaCadenas: TStringList;
124- begin
125- ListaCadenas := TStringList.Create;
126- try
127- ListaCadenas.LoadFromFile('Algo_de_Texto_en_Archivo.txt');
128- ListaCadenas.Add('Hola');
129- ListaCadenas.SaveToFile('Algo_de_Texto_en_Archivo.txt');
130- finally
131- ListaCadenas.Free;
132- end;
133-end.
134111```
112+program StrListFile;
113+ {$mode objfpc}
114+ uses
115+ Classes, SysUtils;
116+ var
117+ ListaCadenas: TStringList;
118+ begin
119+ ListaCadenas := TStringList.Create;
120+ try
121+ ListaCadenas.LoadFromFile('Algo_de_Texto_en_Archivo.txt');
122+ ListaCadenas.Add('Hola');
123+ ListaCadenas.SaveToFile('Algo_de_Texto_en_Archivo.txt');
124+ finally
125+ ListaCadenas.Free;
126+ end;
127+ end.
128+```
135129
136-   ¡Acabamos de abrir un archivo, hemos editado el texto y lo hemos guardado de nuevo¡
130+¡Acabamos de abrir un archivo, hemos editado el texto y lo hemos guardado de nuevo¡
137131
138132## Comparación dinámica de matrices de cadenas
139133
140-   TStringList es simplemente una versión orientada a objetos de una matriz de cadena dinámica. Algunos métodos son análogos:
141-
142-| Operación                      | Matriz de cadenas | TStringList |
143-|----|----|----|
144-| Declaración de Variable | ListaCadenas: array of string; | ListaCadenas: TStringList; |
145-| Inicialización | constructor implícito | ListaCadenas := TStringList.Create |
146-| Dimensionar | SetLength(ListaCadenas, X); | ListaCadenas.Size := X; |
147-| Obtener dimensión | X := Length(ListaCadenas); | X := ListaCadenas.Count; |
148-| Añadir elemento | SetLength(ListaCadenas, Length(ListaCadenas) + 1); ListaCadenas\[Length(ListaCadenas) - 1\] := X; | ListaCadenas.Add(X); |
149-| Borrar item | for I := Index to Length(ListaCadenas) - 2 do ListaCadenas\[I\] := ListaCadenas\[I + 1\]; SetLength(ListaCadenas, Length(ListaCadenas) - 1); | ListaCadenas.Delete(Index);              |
150-| Eliminar todos los items | SetLength(ListaCadenas, 0); | ListaCadenas.Clear; |
151-| Terminación | destructor implícito | ListaCadenas.Free; |
134+TStringList es simplemente una versión orientada a objetos de una matriz de cadena dinámica. Algunos métodos son análogos:
152135
153-   Sin embargo TStringList ofrece mucha mas funcionalidad que una simple estructura del tipo matriz dinámica.
136+Operación | Matriz de cadenas | TStringList
137+---|---|---
138+Declaración de Variable | ListaCadenas: array of string; | ListaCadenas: TStringList;
139+Inicialización | constructor implícito | ListaCadenas := TStringList.Create
140+Dimensionar | SetLength(ListaCadenas, X); | ListaCadenas.Size := X;
141+Obtener dimensión | X := Length(ListaCadenas); | X := ListaCadenas.Count;
142+Añadir elemento | SetLength(ListaCadenas, Length(ListaCadenas) + 1); ListaCadenas[Length(ListaCadenas) - 1] := X; | ListaCadenas.Add(X);
143+Borrar item | for I := Index to Length(ListaCadenas) - 2 do ListaCadenas[I] := ListaCadenas[I + 1]; SetLength(ListaCadenas, Length(ListaCadenas) - 1); | ListaCadenas.Delete(Index);
144+Eliminar todos los items | SetLength(ListaCadenas, 0); | ListaCadenas.Clear;
145+Terminación | destructor implícito | ListaCadenas.Free;
146+
147+Sin embargo TStringList ofrece mucha mas funcionalidad que una simple estructura del tipo matriz dinámica.
154148
155149## Sigue aprendiendo
156150
157-   
158-
159-TStringList tiene algunas características interesantes adicionales:
151+TStringList tiene algunas características interesantes adicionales:
160152
161-- 1\. Permite ordenar las cadenas.
162-- 2\. Permite limitar el listado a solamente cadenas únicas (no repetidas).
163-- 3\. Se puede obtener el texto de las cadenas como una simple cadena utilizando la propiedad Text;
164-- 4\. Se puede almacenar un objeto u otro dato próximo a la cadena.
153+ * 1\. Permite ordenar las cadenas.
154+ * 2\. Permite limitar el listado a solamente cadenas únicas (no repetidas).
155+ * 3\. Se puede obtener el texto de las cadenas como una simple cadena utilizando la propiedad Text;
156+ * 4\. Se puede almacenar un objeto u otro dato próximo a la cadena.
165157
166-Para aprender los diferentes procedimientos, funciones y propiedades, puedes ver [Documentación de TStringList](http://www.freepascal.org/docs-html/rtl/classes/tstringlist.html)
158+Para aprender los diferentes procedimientos, funciones y propiedades, puedes ver [Documentación de TStringList](<http://www.freepascal.org/docs-html/rtl/classes/tstringlist.html>)
167159
168-   Si sientes que podría haber dejado algo fuera,*'modificalo a voluntad!*'
160+Si sientes que podría haber dejado algo fuera,_'modificalo a voluntad!'_
169161
170-   ¡Espero que sea de ayuda!
162+¡Espero que sea de ayuda!
171163
172164## Ver además:
173165
174-- [[Character and string types]]
166+ * [[Character and string types]]
175167
176168---
177-*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](/wiki-contact).*
178-Category: Castellano
179-Category: Español
169+*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](/wiki-contact).*

Back to history