Tipos de cadenas en Delphi (Delphi para principiantes)

hombre usando laptop

Fuente de la imagen RF/Cadalpe/Getty Images





Como con cualquier lenguaje de programación, en Delfos , las variables son marcadores de posición que se utilizan para almacenar valores; tienen nombres y tipos de datos. El tipo de datos de una variable determina cómo se almacenan los bits que representan esos valores en la memoria de la computadora.

Cuando tenemos una variable que contendrá una serie de caracteres, podemos declararla del tipo Cuerda .
Delphi proporciona una gran variedad de operadores de cadenas, funciones y procedimientos. Antes de asignar un tipo de datos de cadena a una variable, debemos comprender a fondo los cuatro tipos de cadenas de Delphi.



Cuerda corta

Simplemente pon, Cuerda corta es una matriz contada de caracteres (ANSII), con hasta 255 caracteres en la cadena. El primer byte de esta matriz almacena la longitud de la cadena. Dado que este era el tipo de cadena principal en Delphi 1 (Delphi de 16 bits), la única razón para usar Short String es por compatibilidad con versiones anteriores.
Para crear una variable de tipo ShortString usamos:

|_+_|


los s variable es una variable de cadena corta capaz de contener hasta 256 caracteres, su memoria es de 256 bytes asignados estáticamente. Dado que esto suele ser un desperdicio, es poco probable que su cadena corta se extienda a la longitud máxima, el segundo enfoque para usar Cadenas cortas es usar subtipos de Cadena corta, cuya longitud máxima está entre 0 y 255.



|_+_|

Esto crea una variable llamada pequeño cuya longitud máxima es de 50 caracteres.

Nota: cuando asignamos un valor a una variable de cadena corta, la cadena se trunca si excede la longitud máxima para el tipo. Cuando pasamos cadenas cortas a alguna rutina de manipulación de cadenas de Delphi, se convierten en y desde cadenas largas.

Cuerda / Larga / Ansi

Delphi 2 llevado a Object Pascal Cuerda larga escribe. La cadena larga (en la ayuda de Delphi AnsiString) representa una cadena asignada dinámicamente cuya longitud máxima está limitada solo por la memoria disponible. Todas las versiones de Delphi de 32 bits utilizan cadenas largas de forma predeterminada. Recomiendo usar cadenas largas siempre que puedas.

|_+_|

los s La variable puede contener desde cero hasta cualquier número práctico de caracteres. La cadena crece o se reduce a medida que le asigna nuevos datos.



Podemos usar cualquier variable de cadena como una matriz de caracteres, el segundo carácter en s tiene el índice 2. El siguiente código

|_+_|

asigna T al segundo carácter de la s variable. Ahora los pocos de los primeros personajes en s parece: Calle TTe s... .
No se deje engañar, no puede usar s[0] para ver la longitud de la cadena, s no es una cadena corta.



Recuento de referencias, copia en escritura

Dado que Delphi realiza la asignación de memoria, no tenemos que preocuparnos por la recolección de basura. Cuando se trabaja con cadenas largas (Ansi) Delphi utiliza el conteo de referencias. De esta manera, la copia de cadenas es más rápida para cadenas largas que para cadenas cortas.
Recuento de referencias, por ejemplo:

|_+_|

Cuando creamos una cadena s1 y le asigna algún valor, Delphi asigna suficiente memoria para la cadena. cuando copiamos s1 a s2 , Delphi no copia el valor de la cadena en la memoria, solo aumenta el recuento de referencias y altera el s2 para apuntar a la misma ubicación de memoria que s1 .



Para minimizar la copia cuando pasamos cadenas a las rutinas, Delphi utiliza la técnica de copia en escritura. Supongamos que vamos a cambiar el valor de la s2 variable de cadena; Delphi copia la primera cadena en una nueva ubicación de memoria, ya que el cambio debería afectar solo a s2, no a s1, y ambos apuntan a la misma ubicación de memoria.

Cuerda ancha

Las cadenas anchas también se asignan y administran dinámicamente, pero no utilizan el recuento de referencias ni la semántica de copia en escritura. Las cadenas anchas constan de caracteres Unicode de 16 bits.



Acerca de los juegos de caracteres Unicode

El conjunto de caracteres ANSI utilizado por Windows es un conjunto de caracteres de un solo byte. Unicode almacena cada carácter del conjunto de caracteres en 2 bytes en lugar de 1. Algunos idiomas nacionales utilizan caracteres ideográficos, que requieren más de los 256 caracteres admitidos por ANSI. Con la notación de 16 bits podemos representar 65.536 caracteres diferentes. La indexación de cadenas multibyte no es confiable, ya que si] representa el byte i-ésimo (no necesariamente el carácter i-ésimo) en s .

Si debe utilizar caracteres anchos, debe declarar una variable de cadena del tipo WideString y su variable de carácter del tipo WideChar. Si desea examinar una cadena ancha de un carácter a la vez, asegúrese de probar los caracteres de varios bits. Delphi no admite conversiones automáticas de tipo entre tipos de cadenas Ansi y anchas.

|_+_|

Nulo terminado

Una cadena terminada en cero o nula es una matriz de caracteres, indexada por un número entero que comienza desde cero. Dado que la matriz no tiene indicador de longitud, Delphi usa el carácter ASCII 0 (NULL; #0) para marcar el límite de la cadena.
Esto significa que esencialmente no hay diferencia entre una cadena terminada en nulo y una matriz [0..NumberOfChars] de tipo Char, donde el final de la cadena está marcado por #0.

Usamos cadenas terminadas en nulo en Delphi cuando llamamos a las funciones de la API de Windows. Object Pascal nos permite evitar jugar con punteros a matrices de base cero cuando se manejan cadenas terminadas en nulo usando el tipo PChar. Piense en un PChar como un puntero a una cadena terminada en nulo o al arreglo que representa uno. Para obtener más información sobre los punteros, consulte: Punteros en Delphi .

por ejemplo, el ObtenerTipoDeUnidad La función API determina si una unidad de disco es extraíble, fija, de CD-ROM, de disco RAM o de red. El siguiente procedimiento enumera todas las unidades y sus tipos en la computadora de un usuario. Coloque un botón y un componente Memo en un formulario y asigne un controlador OnClick de un botón:

|_+_|

Mezclando las cuerdas de Delphi

Podemos mezclar libremente los cuatro tipos diferentes de cuerdas, Delphi dará lo mejor para dar sentido a lo que estamos tratando de hacer. La asignación s:=p, donde s es una variable de cadena y p es una expresión PChar, copia una cadena terminada en nulo en una cadena larga.

Tipos de caracteres

Además de los cuatro tipos de datos de cadena, Delphi tiene tres tipos de caracteres: Carbonizarse , Ansi Char y WideChar . Una constante de cadena de longitud 1, como 'T', puede indicar un valor de carácter. El tipo de carácter genérico es Char, que es equivalente a AnsiChar. Los valores de WideChar son caracteres de 16 bits ordenados según el conjunto de caracteres Unicode. Los primeros 256 caracteres Unicode corresponden a los caracteres ANSI.