Bueno aquí estamos otra vez ahora veremos una de las cosas más
importante de todos los lenguajes de programación y son las cadenas de
texto o String.
Caracteres ASCII
Pero antes vamos a ver que es un carácter. Un carácter es una letra o
numero. Un carácter es ‘A’ por ejemplo veremos como se puede utilizar
caracteres en Delphi.
Los caracteres constantes pueden ser representados con su notación
simbólica, p. ej. 'k', o con una notación numérica, como en #78. Este
último también puede ser representado utilizando la función Chr, como
en Chr (78). La conversión recíproca puede hacerse mediante la
función Ord.
En general es mejor utilizar la notación simbólica cuando se indican
letras, dígitos o símbolos. Para referirse a caracteres especiales, sin
embargo, normalmente usará la notación numérica. La siguiente lista
incluye algunos de los caracteres especiales más usados :
• #9 tabulador
• #10 nueva línea
• #13 retorno de carro (tecla "enter" o "intro")
Bueno sabiendo esto vamos a ver los String
Las cadenas de caracteres son secuencias de caracteres .
El tipo identificador de las cadenas es String. Cuando declaramos una
variable de tipo string será posible introducir u na cadena de caracteres
,también es factible declarar cadenas de longitud máxima agregando al
momento de la declaración la longitud de la variable, por ejemplo:
VAR
Mensaje : String[120]; // Longitud máxima = 120 caracteres
Dicho esto es obligatorio hacer un pequeño inciso en esto de los string,
dado que Windows toma los string prestados de C los string de Windows
tendrán el formato de C, es decir acabaran con 0.
Ejemplo de string de C ( String Hola )
Posición 0 – H
Posición 1 – o
Posición 2 – l
Posición 3 – a
Posición 4 – 0 -> cero no confundir con carácter cero
Si ahora ponemos encima de la cadena otra más pequeña como por
ejemplo ( String Fin ).
Posición 0 – F
Posición 1 – i
Posición 2 – n
Posición 3 – 0 -> cero no confundir con carácter cero
Como vemos añade al final del string un cero indicando final de
String.
En Delphi nada de esto ocurre los string de Delphi están tomados de
Objet-Pascal y como tal tienen su misma estructura.
Ejemplo de string de Delphi ( String Hola )
Posición 1 – H
Posición 2 – o
Posición 3 – l
Posición 4 – a
Si ahora ponemos encima de la cadena otra más pequeña como por
ejemplo ( String Fin ).
Posición 1 – F
Posición 2 – i
Posición 3 – n
Posición 4 – a la a de la string Hola
// Nota importante//
Como vemos Delphi empieza a contar desde 1 en vez desde cero como
lo hace Windows prestado de C, como todos los componentes de la
paleta VCL son compatibles con Windows pues estos empezaran a
contar desde cero como lo haría Windows, esto hay que tenerlo muy
presente a la hora de utilizar dichos componentes.
1. Funciones de manejo de cadenas
En este capítulo vamos a ver varias de las funciones que nos ofrece
Delphi para la manipulación de cadenas. Todas las funciones y
procedimientos que aquí se mencionan están en la unit System, unit de
referencia para quien quiera ampliar conocimientos vía la ayuda de
Delphi.
Veremos primero los dos operadores para manejar cadenas el operador
+ y el operador =
Operador +
Es una de las formas más sencillas de unir dos cadenas y se maneja
exactamente como una suma.
Ejemplo:
Cadena1 := 'Buenos ';
Cadena2 := 'días ';
Cadena3 := Cadena1 + Cadena2;
El resultado -> Buenos días
Operador =
Realiza una comparación entre dos cadenas. Dicha comparación
diferencia las mayúsculas de las minúsculas, por lo que la cadena 'Abc'
no será la misma que la cadena 'abc'.
Ahora veremos las funciones de las que Delphi dispone para
manejar cadenas (String)
FUNCTION CompareStr(S1, S2: String): Integer;
Realiza una comparación entre las cadenas S1 y S2. Dicha
comparación diferencia las mayúsculas de las minúsculas, por lo
que la cadena 'Abc' no será la misma que la cadena 'abc'.
La función devuelve 0 si ambas cadenas resultan ser idénticas, un
número positivo si la primera cadena (S1) es mayor que la
segunda cadena (S2) o un número negativo si la primera cadena
es menor que la segunda cadena.
FUNCTION CompareText(S1, S2: String): Integer;
Hace lo mismo que la función anterior, con una pequeña
diferencia: no distingue entre mayúsculas y minúsculas, por lo que
las cadenas 'Abc' y 'abc' serán iguales para esta función, con lo
que nos devolvería el valor 0.
FUNCTION Length(S: String): Integer;
Nos devuelve el número de caracteres que tiene la cadena S, es
decir, su longitud.
FUNCTION LowerCase(S: String): String;
Devuelve una cadena que resulta de convertir a minúsculas la
cadena pasada como argumento.
FUNCTION UpperCase(S: String): String;
Devuelve una cadena que resulta de convertir a mayúsculas la
cadena pasada como argumento.
FUNCTION Copy(S: String; Inicio, CuantosCar: Integer): String;
Devuelve una subcadena de la cadena pasada como argumento,
S. Toma como posición inicial dentro de S la dada por Inicio, y a
partir de ahí toma CuantosCar caracteres. Si Inicio es mayor que
la longitud de la cadena, devuelve cadena vacía. Si a partir de
Inicio, CuantosCar excede el número de caracteres que haya en la
cadena, sólo devuelve hasta el final de la cadena. Vamos a ver
algunos ejemplos para terminar de aclararnos:
Tenemos definido, como constante, lo siguiente:
Cadena = 'Esto_es_una_cadena_larga_para_hacer_pruebas';
Y los siguientes resultados para varias llamadas a Copy:
Copy(Cadena, 1, 10); --> 'Esto_es_un'
Copy(Cadena, Length(Cadena) + 2, 2); --> ''
Copy(Cadena, Length(Cadena) - 3, 5); --> 'ebas'
Copy(Cadena, 0, 5); --> 'Esto_'
PROCEDURE Delete(VAR S: String; Inicio, CuantosCar: Integer);
Borra de la cadena pasada como argumento los caracteres
comprendidos entre la posición inicial dada por el argumento
Inicio, y borra CuantosCar. Al igual que con la función Copy, si
Inicio es mayor que la longitud de la cadena, no borrará nada, y si
a partir de Inicio, CuantosCar excede el número de caracteres que
haya en la cadena, sólo borrará hasta el final de la cadena. Vamos
a ver también ejemplos. Para ello, supongamos que tenemos tres
variables de tipo String, llamadas s1, s2 y s3, cuyo contenido sea
el mismo, concretamente, la cadena de los ejemplos para Copy.
Así, tendríamos lo siguiente:
Delete(s1, 1, 10); --> s1 =
'a_cadena_larga_para_hacer_pruebas'
Delete(s2, Length(s2) + 2, 4); --> s2 =
'Esto_es_una_cadena_larga_para_hacer_pruebas'
Delete(s3, Length(s3) - 3, 5); --> s3 =
'Esto_es_una_cadena_larga_para_hacer_pru'
PROCEDURE Insert(S: String; VAR S1: String; Indice: Integer);
Este procedimiento nos fusiona una cadena en otra comenzando
en la posición dada por Indice. La cadena resultado será
almacenada en S1, y se copiará la cadena S dentro de S1 a partir
de la posición Indice. Vamos a ver algunos ejemplos, suponiendo
que tenemos los valores siguientes para las variables: S :=
'Cadena_Inicial', S1 := 'Otro_texto'
Insert(S, S1, 3); --> S1 = 'OtCadena_Inicialro_texto'
Insert(S, S1, 6); --> S1 = 'Otro_Cadena_Inicialtexto'
Insert(S, S1, Length(S1) + 3); --> S1 = 'Otro_textoCadena_Inicial'
FUNCTION IntToHex(Valor, Digitos: Integer): String;
Esta función nos devuelve una cadena que resulta de convertir el
número que pasamos en Valor a hexadecimal. La variable Digitos
nos dice el número mínimo de dígitos hexadecimales a devolver.
Por ejemplo:
IntToHex(54367, 1); --> D45F
IntToHex(54367, 10); --> 000000D45F
FUNCTION IntToHex (Valor: Integer): String;
Simplemente, nos devuelve la representación del número pasado
en la variable Valor como una cadena.
FUNCTION Pos(SubC, C: String): Integer;
Esta función busca la subcadena SubC dentro de la cadena C.
Devuelve un valor entero que resulta ser el índice del primer
carácter de SubC dentro de C. Si no encuentra la subcadena,
devuelve el valor 0. Por ejemplo, supongamos que tenemos tres
variables de tipo String, S1 := 'Cadena', S2 := 'de', S3 := 'algo'.
Tendríamos los resultados:
Pos(S2, S1); --> 3
Pos(S3, S1); --> 0
PROCEDURE Str(X [: Ancho [: Decimales ]]; VAR S: String);
Convierte X a cadena (que se almacenará en S) de acuerdo a los
parámetros de formato Ancho y Decimales. La variable X puede
ser tanto real como entero, mientras que Ancho y Decimales son
de tipo entero. Veamos algunos ejemplos:
Str(2.[Link], S); --> S = ' 2.5'
Str(2.[Link], S); --> S = '2.540'
FUNCTION StrToInt(S: String): Integer;
Convierte la cadena pasada como argumento a su representación
numérica como entero. Si la conversión no es posible, saltará una
excepción por error de conversión.
FUNCTION StrToIntDef(S: String; ValorPorDefecto: Integer):
Integer;
Convierte la cadena S a un entero. Si la conversión no es posible,
en lugar de provocar una excepción, devolverá el valor que se le
pase en la variable ValorPorDefecto.
FUNCTION Trim(S: String): String;
Devuelve una cadena que resulta de eliminar los espacios y
caracteres de control existentes en S tanto al principio como al
final. Por ejemplo:
Trim(' Hola Mundo :-) '); --> 'Hola Mundo :-)'
Trim(' Hola :-)'); --> 'Hola :-)'
Trim('Hola :-) '); --> 'Hola :-)'
FUNCTION TrimLeft(S: String): String;
Devuelve una cadena que resulta de eliminar los espacios y
caracteres de control existentes en S sólo al principio.
FUNCTION TrimRight(S: String): String;
Devuelve una cadena que resulta de eliminar los espacios y
caracteres de control existentes en S sólo al final.