III

UNIDAD C++BUILDER ARREGLOS

6.- TStringList C++BUILDER


De nuevo, TList se especializa en el almacenamiento y procesamiento de toda clase de objetos, TStringList en principio es una clase derivada de TList, esto significa que HEREDA o que puede usar muchas de las propiedades y métodos que pertenecen a TList, además de poder usar igualmente algunas propiedades y métodos que le son propios.

La diferencia básica, con TList, es que TStringList solo permite almacenar strings, como este es el caso mas común en el ambiente visual que se ha venido desarrollando, así como en los sistemas o problemas de información de naturaleza administrativa, el resto del capitulo se dedica a estudiar, analizar y construir aplicaciones con esta clase.

Sus propiedades y métodos son;

1.- Propiedades;


Count.- Cuenta las strings en la lista

Duplicates.- Permite strings duplicadas en una lista ordenada de strings

Objects.- Asocia un objeto a una string existente (ej. un bitmap a una string).

Sorted.- Especifica que las strings en la lista deben ser ordenadas automáticamente, solo poner esta propiedad en True.

Strings[reng].- La mas importante, se usa para accesar, y leer o modificar una posición o elemento especifico o determinado.


2.- Métodos;


Add.- Inserta un objeto nuevo al final de la lista y regresa el lugar o posición donde se realizo la inserción.

Clear.- Se usa para vaciar el arreglo, también libera la memoria ocupada por los objetos de la lista.

Delete.- Se usa para eliminar un objeto especifico, lleva como argumento o parámetro la posición del objeto.

Exchange.- Intercambia dos objetos de la lista.

Find.- Regresa la posición de una string en una lista ordenada.

IndexOf.- Regresa la posición del objeto en la lista.

Insert.- Inserta un objeto en la posición deseada.

Sort.- Ordena los objetos de la lista, usando QuickSort.


Recuerde que objetos(variables) derivadas de TStringList pueden usar también muchas de las propiedades y métodos de TList.

Se analiza ahora el procesamiento normal de estos objetos o desde una perspectiva mas tradicional variables arreglo de tipo lista.

Lo mas importante a recordar es combinar lo ya visto para tratamiento de variables tipo lista normales y usar igualmente las propiedades y métodos que contiene esta clase.

Para declarar un objeto o variable derivada de esta clase, recordar que aquí son dos pasos, primero se debe declarar el objeto o variable y segundo se debe crear una instancia real en memoria de este objeto o variable, como se muestran en los siguientes ejemplos;

Creación y declaración de una lista de 8 ciudades

// área de declaración
TStringList *ciudades;
ciudades = new TStringList;

nota recordar que esta listas son dinámicas, y que no tiene sentido asignarle un tamaño fijo, que también se podría hacer.

Creación y declaración de una lista de 6 edades;

// declaración y creación de las listas
TStringList *edades;
edades = new TStringList;

Recordar que son listas de strings, si ocupan operaciones con números se deberá usar ToInt() y ToDouble().

Recordar además que estos dos renglones que se ocupan para la declaración, van a ir juntos al principio del onclick del botón Ok, pero si la captura se realiza usando un montón o conjunto de componentes edits y otros botones realizan otro proceso con la lista, entonces tendrán que ir separados en su lugar respectivo ( mas delante se indica como ).

Para capturar sus elementos usando de momento el método que se analizo en listas normales, es decir un montón de componentes Edit, como en el siguiente ejemplo;

// área de declaración y creación
TStringList *ciudades;
ciudades = new TStringList;
// captura de datos
ciudades->Strings[0]=Edit1->Text;
ciudades->Strings[1]=Edit2->Text;

párrafos arriba se encuentra la definición de la propiedad Strings[];

Recordar que son listas y por tanto la primera posición, o primer renglón es la posición 0(cero).

Para desplegar los datos recordar que se puede usar un componente ListBox o un componente ComboBox que permiten manipular el conjunto de datos a la vez, solo usar las propiedades Text, tanto del ListBox, así como de la variable objeto derivada de TStringList, como en el siguiente ejemplo;

void __fastcall TForm1::Button1Click(TObject *Sender)
{ TStringList *ciudades;
ciudades = new TStringList;
// procesos con la lista
// despliegue de la lista
ListBox1->Items->Text = ciudades->Text;
}

La pantalla de salida es:

image72.jpg

Para el caso de procesos mas comunes como operaciones, comparaciones, etcétera, solo recordar combinar las propiedades y métodos de TStringList con los métodos vistos y aplicados ya para componentes visuales y para los de variables de tipo arreglo ya vistas.

Esto es importante porque exige conocer y familiarizarse con esta clase mas a fondo, por ejemplo un caso sencillo, capturar una lista de 5 edades en años, convertirlos posteriormente a meses y al final desplegar las edades convertidas a meses.

Una de las posibles soluciones es:

Código

void __fastcall TForm1::Button1Click(TObject *Sender)
{ TStringList *edad;
edad = new TStringList;
int reng;
// captura de datos
edad->Add(Edit1->Text);
edad->Add(Edit2->Text);
edad->Add(Edit3->Text);
edad->Add(Edit4->Text);
edad->Add(Edit5->Text);
// procesos con la lista
for(reng=0;reng<edad->Count;reng++)
{ edad->Strings[reng]=FormatFloat("###.##",edad->Strings[reng].ToInt() *
12);
};
}

notas:

En el for se esta usando la propiedad Count que devuelve la cantidad de elementos que contiene la lista, esto es con la finalidad de no tener mas que procesar los elementos existentes.

La operación es un solo renglón en el programa.

Recordar que Propiedad Strings[] permite manipular una posición especifica dentro de una lista, recordar igualmente que la primera posición, es la 0(cero).

Para pasar los elementos de edad a ListBox, ambos componente y variable/objeto usan propiedad Text, porque ambos la comparten o la heredan esto es importante porque demuestra que realmente no son cosas o elementos diferentes.

Lo mas importante, es que se debe entender, aprender y aplicar combinaciones de propiedades, métodos y operaciones como en el ejemplo.

La pantalla de salida es;

image73.jpg

Para poder usar un solo componente edit para capturar todos los elementos de la lista:

1. La declaración de la lista se pone en dos partes diferentes, dentro y arriba de la Unit, como se observa en el siguiente ejemplo;

#include <vcl\vcl.h>
#pragma hdrstop
#include "Unit1.h"
//-------------------------------------------
#pragma resource "*.dfm"
TForm1 *Form1;
TStringList *edad;
//-------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
edad=new TStringList;
}
//-------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
edad->Add(Edit1->Text);
}

La captura no ocupa ciclo for, pero si ocupa su propio BUTTON OK, solo con Caption =“insertar o agregar” y su código usa el método Add como en el ejemplo de arriba.

Operaciones y comparaciones son normales, es decir un for renglón hasta que sea menor que Count, etc., en el onclick del segundo botón.

Despliegues igualmente en forma normal, es decir sin ciclo for e igualando Text en ambos, el TStringList y el Listbox.

TAREAS PROGRAMACION C++BUILDER

1.- CAPTURAR Y DESPLEGAR 5 MUEBLES DE HOGAR

2.- CAPTURAR EN UNA LISTA 5 ESTATURAS EN CENTIMETROS, DESPLEGARLAS CONVERTIDAS EN PULGADAS ( 1 PULGADA = 2.54 CM.)

3.- CAPTURAR EN UNA LISTA 6 PESOS EN KG., CONVERTIRLOS POSTERIORMENTE A LIBRAS Y SOLO DESPLEGAR EN EL ListBox RESPECTIVO PESOS MAYORES DE 120 LIBRAS.

4.- CAPTURAR EN SUS CUATRO LISTAS RESPECTIVAS, MATRICULA, NOMBRE, CALIFICACION DE MATEMATICAS, CALIFICACION DE FISICA, DE 5 ALUMNOS, CALCULAR POSTERIORMENTE UNA LISTA DE PROMEDIOS, Y EN LOS ListBox DE SALIDA SOLO DESPLEGAR LOS DATOS DE ALUMNOS APROBADOS.

Politica de Privacidad