0% encontró este documento útil (0 votos)
18 vistas

Delphi 15 String, TString y TStringList

Cargado por

carlos
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
18 vistas

Delphi 15 String, TString y TStringList

Cargado por

carlos
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 21

Trabajando con Strings

Delphi posee dos formas de trabajar con strings


– Tipos de Strings
• ShortString (los usados en Programación)
• AnsiString : Pueden tener hasta 2GB de longitud.
• WideString : Usa caracteres Unicode (16 bits)
– Clases de Strings
• TStrings
• TStringList
Tipos de Strings

Tipo Longitud Máxima Memoria Requerida


ShortString 255 caracteres 2 a 256 bytes
AnsiString ~2^31 caracteres 4 bytes a 2GB
WideString ~2^31 caracteres 4 bytes a 2GB

Para trabajar con caracteres Unicode (caracteres de 16 bits).


Ver el mapa completo on-line en :
http://www-atm.physics.ox.ac.uk/user/iwi/charmap.html
Tipos de Strings
La palabra reservada string funciona como un identificador
de tipo genérico.
Por ejemplo
var S: string;
crea una variable que contiene un string.
Por defecto, se interpreta como un AnsiString. Para
modificar esto use la directiva del compilador {$H–} y se
interpretará como un ShortString.
Tipos de Strings
Los elementos de un string pueden ser accedidos como un
arreglo de caracteres

var I: Integer;
begin
I := Length(MyString);
while I > 0 do
begin
MyString[I] := UpCase(MyString[I]);
I := I - 1;
end;
end;
Long String
AnsiString (o LongSTring) representa un string alocado dinámicamente
cuya longitud sólo está limitada por la cantidad de memoria disponible.
Utiliza caracteres de 8 bits.
Una variable long-string es un puntero de 4 bytes.
– Cuando la variable está vacía vale nil y el string no ocupa lugar en
memoria.
– Cuando la variable no está vacía, apunta a un área de memoria
dinámicamente alocada que contiene:
• el valor del string,
• un indicador de longitud de 32-bit
• un contador de referencias de 32-bit.
Esta memoria se reserva en la heap pero su manejo es automático
y no requiere código adicional.
Long String : reference counting
Como las variables long-string son punteros, dos o más de
ellos pueden referenciar el mismo valor sin consumir
memoria adicional.
Cuando una variable long-string es destruida o se le asigna
un nuevo valor, el contador de referencia del viejo string (el
valor previo de la variable) es decrementado y el contador de
referencia del nuevo valor (si lo hay) es incrementado.
Si el contador de referencia de un string llega a cero, su
memoria es liberada.
Este proceso se llama reference-counting.
AllocMemCount y AllocMemSize

AllocMemCount
– Esta variable representa la cantidad total de
bloques de memoria alocados en una
aplicación.

AllocMemSize
– Esta variable representa el tamaño total de
los bloques de memoria alocados.
Ejemplo Cant.de Bloques = 79
Cant.de Bloques = 81
80
Mem.Reserv = 1780
Mem.Reserv = 1812
1796
Var Tex1, Tex2, Tex3 : String;
Begin
writeln(AllocMemCount, ' ', AllocMemSize );
Tex1 := 'Ejemplo';
writeln(AllocMemCount, ' ', AllocMemSize );
Tex2 := Tex1;
Tex3 := Tex2;
writeln(AllocMemCount, ' ', AllocMemSize );
Tex2 := 'Nuevo';
writeln(AllocMemCount, ' ', AllocMemSize );
Tex1[1] := 'X';
writeln(AllocMemCount, ' ', AllocMemSize );
End;
Cant.Bloques = 82 ; Mem.Reserv = 1828
Declarando e inicializando Strings

La siguiente instrucción declara un long string:


S: string;
Estos strings son inicializados automáticamente
con el valor nulo.
Puede utilizar la variable EmptyStr para testear
si el string está vacío
if S = EmptyStr then
o if S = '' then
Declarando e inicializando Strings
Un string vacío no tiene un valor válido. Intentar indexar
un string vacío es equivalente a acceder a una posición
de memoria inexistente y producirá un error.
var
S: string;
begin
S[i]; // error de acceso
// sentencias
end;
Declarando e inicializando Strings

La asignación de un valor string constante (o cualquier


expresión que retorne un string) a una variable modificará
su longitud dinámicamente.
Ejemplos
MyString := 'Hello world!';
MyString := 'Hello ' + 'world';
MyString := MyString + '!';
MyString := ' '; { un blanco }
MyString := ''; { string vacío }
Long Strings
La función Length retorna la cant.de caracteres del string.
El procedure SetLength ajusta la longitud del string.
S := 'No es nulo';
//setea dinámicamente la long.de S a 100
SetLength(S, 100);

SetLength preserva los caracteres existentes en el string


pero el contenido del nuevo espacio es indefinido.
Luego del SetLength, S es la única referencia al string, es
decir, es un string cuyo contador de referencia tiene valor 1.
Declarando strings
Recuerde que declarar un string como
var S: string[n];
declara implícitamente un Short String, no un Long String
de longitud n.

Un Long String de longitud n se declara así:


var S: string;
begin
SetLength(S, n);
Elemento 0 inaccesible
program Produce; program Produce;
var var
str : String; str : String;
len : Integer; len : Integer;
begin begin
str := ‘texto'; str := ‘texto';
len := str[0]; len := Length(str);
end. ERROR! end.

Long Strings NO poseen el elemento 0 conteniendo la longitud.


Listas de Strings

TStrings es la clase base que representa una lista de


strings.
Posee propiedades y métodos para
– Agregar o borrar strings en una posición deteminada dentro
de la lista.
– Reordenar los strings de la lista.
– Acceder a un string en un aposición particular.
– Leer strings de un archivo o grabarlos en un archivo.
– Asociar un objeto a cada string de la lista.
Manejando una lista de Strings
Las aplicaciones manejan listas de strings:
– Items de un ComboBox
– Lineas de un Memo
– Nombres de Fonts
– Nombres de filas y columnas de un StringGrid

La clase TString provee una interfaz común para


cualquier lista de string. Junto con su descendiente
TStringList proveen todos los métodos y propiedades
necesarios para manejar la lista.
TStringList

TStringList deriva de TString e introduce :


– Una forma de ordenar los elementos de la lista
– Prohibe strings duplicados dentro de una lista
ordenada.
– Responde a cambios en el contenido de la lista.

Esta es la clase que debemos utilizar para


manejar la lista de strings desde nuestro
programa.
TStringList

Propiedades
– Duplicates : Indica si los strings duplicados pueden ser
agregados en listas ordenadas.
– CaseSensitive : indica cómo comparar los strings.
Métodos
– Sort : Ordena la lista de strings
Eventos
– OnChange : Ocurre después de modificar la lista
– OnChanging : ocurre antes de que se modifique la lista
TStringList1.dpr

Desarrolle una aplicación de consola para


resolver el siguiente problema
– Dada una lista de nombres terminada en FIN
utilice un objeto TStringList para visualizarla
ordenada alfabéticamente.
TStringList1.dpr
program PTStringList1; while palabra <> 'FIN' do
{$APPTYPE CONSOLE} begin
uses MiLista.add(palabra);
SysUtils, Classes; write('Ingrese un nombre : ');
Var MiLista : TStringList; readln(palabra);
palabra : String; end;
i : Integer; //Mostrar la lista ordenada
begin MiLista.Sort;
MiLista := TStringList.create; for i:= 0 to MiLista.Count-1 do
write('Ingrese un nombre : '); writeln(MiLista.strings[i]);
readln(palabra); MiLista.free;
end.
TStringList1.dpr

También podría gustarte