Tipos de cadena en Delphi

Como con cualquier lenguaje de programación, en Delphi, las variables son marcadores de posición utilizados 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 declarar que es de tipoCuerda.
Delphi proporciona una variedad saludable 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 cadena de Delphi.

Cadena corta

Simplemente pon, Cadena 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 la compatibilidad con versiones anteriores.
Para crear una variable de tipo ShortString usamos:

instagram viewer
var s: cadena corta; s: = 'Programación de Delphi'; // S_Length: = Ord (s [0])); // que es lo mismo que Longitud (s)


los s La variable es una variable de cadena corta capaz de contener hasta 256 caracteres, su memoria tiene 256 bytes asignados estáticamente. Como esto suele ser un desperdicio, es poco probable que su cadena corta se extienda a la longitud máxima: segundo El enfoque para usar cadenas cortas es usar subtipos de cadenas cortas, cuya longitud máxima es de 0 a 255.

var ssmall: String [50]; ssmall: = 'Cadena corta, hasta 50 caracteres';

Esto crea una variable llamada ssmall 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 a y desde cadenas largas.

Cadena / Largo / Ansi

Delphi 2 traído a Object Pascal Cuerda larga tipo. 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 usan cadenas largas por defecto. Recomiendo usar cadenas largas siempre que pueda.

var s: cadena; s: = 'La cadena s puede ser de cualquier tamaño ...';

los s La variable puede contener de cero a 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

s [2]: = 'T';

asigna T al segundo personaje del s variable. Ahora los pocos de los primeros personajes en s parece: TTe s str ....
No se engañe, no puede usar s [0] para ver la longitud de la cadena, s no es ShortString.

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 recuento de referencias. De esta forma, la copia de cadenas es realmente más rápida para cadenas largas que para cadenas cortas.
Recuento de referencias, por ejemplo:

var s1, s2: cadena; s1: = 'primera cadena'; s2: = s1;

Cuando creamos cadena s1 variable y asignarle algún valor, Delphi asigna suficiente memoria para la cadena. Cuando copiamos s1 a s2, Delphi no copia el valor de cadena en la memoria, solo aumenta el recuento de referencia 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 copiar en escritura. Supongamos que debemos cambiar el valor de s2 variable de cadena; Delphi copia la primera cadena en una nueva ubicación de memoria, ya que el cambio debería afectar solo s2, no s1, y ambos apuntan a la misma ubicación de memoria.

Cadena 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 consisten en caracteres Unicode de 16 bits.

Acerca de los juegos de caracteres Unicode

El juego de caracteres ANSI utilizado por Windows es un juego de caracteres de un solo byte. Unicode almacena cada carácter en el conjunto de caracteres en 2 bytes en lugar de 1. Algunos idiomas nacionales usan caracteres ideográficos, que requieren más de los 256 caracteres admitidos por ANSI. Con 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 i-ésimo byte (no necesariamente el i-ésimo carácter) en s.

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

var s: WideString; c: WideChar; s: = 'Guía de Delphi_'; s [8]: = 'T'; //s='Delphi_TGuide';

Nulo terminado

Una cadena terminada en cero o nulo es una matriz de caracteres, indexada por un número entero que comienza desde cero. Como la matriz no tiene indicador de longitud, Delphi usa el ASCII 0 (NULL; # 0) carácter 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.

Utilizamos 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 basadas en cero cuando se manejan cadenas terminadas en nulo utilizando el tipo PChar. Piense en un PChar como un puntero a una cadena terminada en nulo o al conjunto que representa uno. Para obtener más información sobre punteros, consulte:Punteros en Delphi.

Por ejemplo, el GetDriveType La función API determina si una unidad de disco es extraíble, fija, CD-ROM, disco RAM o unidad 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:

procedimiento TForm1.Button1Click (Remitente: TObject); var
Unidad: Char; DriveLetter: String [4]; empezarpara Unidad: = 'A' a 'Z' hacerempezar
DriveLetter: = Drive + ': \'; caso GetDriveType (PChar (Unidad + ': \')) de
DRIVE_REMOVABLE: Memo1.Lines. Agregar (DriveLetter + 'Unidad de disquete'); DRIVE_FIXED: Memo1.Lines. Agregar (DriveLetter + 'Unidad fija'); DRIVE_REMOTE: Memo1.Lines. Agregar (DriveLetter + 'Unidad de red'); DRIVE_CDROM: Memo1.Lines. Agregar (DriveLetter + 'Unidad de CD-ROM'); DRIVE_RAMDISK: Memo1.Lines. Agregar (DriveLetter + 'Disco RAM'); final; final; final;

Mezclando las cuerdas de Delphi

Podemos mezclar libremente los cuatro tipos diferentes de cadenas, 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 de PChar, copia una cadena terminada en nulo en una cadena larga.

Tipos de personajes

Además de cuatro tipos de datos de cadena, Delphi tiene tres tipos de caracteres: Carbonizarse, AnsiCharyWideChar. Una constante de cadena de longitud 1, como 'T', puede denotar 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.

instagram story viewer