Types de chaînes dans Delphi (Delphi pour les débutants)

homme utilisant un ordinateur portable

Source de l'image RF/Cadalpe/Getty Images





Comme dans tout langage de programmation, dans Delphes , les variables sont des espaces réservés utilisés pour stocker des valeurs ; ils ont des noms et des types de données. Le type de données d'une variable détermine comment les bits représentant ces valeurs sont stockés dans la mémoire de l'ordinateur.

Lorsque nous avons une variable qui contiendra un tableau de caractères, nous pouvons la déclarer de type Chaîne de caractères .
Delphi fournit un assortiment sain d'opérateurs de chaîne, de fonctions et de procédures. Avant d'affecter un type de données String à une variable, nous devons bien comprendre les quatre types de chaînes de Delphi.





Chaîne courte

Tout simplement, Chaîne courte est un tableau compté de caractères (ANSII), avec jusqu'à 255 caractères dans la chaîne. Le premier octet de ce tableau stocke la longueur de la chaîne. Comme il s'agissait du type de chaîne principal dans Delphi 1 (Delphi 16 bits), la seule raison d'utiliser une chaîne courte est la compatibilité descendante.
Pour créer une variable de type ShortString nous utilisons :

|__+_|


La s La variable est une variable de chaîne courte capable de contenir jusqu'à 256 caractères, sa mémoire est de 256 octets alloués statiquement. Étant donné que cela est généralement inutile - il est peu probable que votre chaîne courte s'étende à la longueur maximale - la deuxième approche de l'utilisation de chaînes courtes consiste à utiliser des sous-types de ShortString, dont la longueur maximale est comprise entre 0 et 255.



|__+_|

Cela crée une variable appelée petit dont la longueur maximale est de 50 caractères.

Remarque : lorsque nous attribuons une valeur à une variable de chaîne courte, la chaîne est tronquée si elle dépasse la longueur maximale du type. Lorsque nous passons des chaînes courtes à une routine de manipulation de chaînes Delphi, elles sont converties en chaînes longues et à partir de celles-ci.

Chaîne / Longue / Ansi

Delphi 2 amené à Object Pascal Chaîne longue taper. Chaîne longue (dans l'aide de Delphi AnsiString) représente une chaîne allouée dynamiquement dont la longueur maximale n'est limitée que par la mémoire disponible. Toutes les versions Delphi 32 bits utilisent des chaînes longues par défaut. Je recommande d'utiliser de longues chaînes chaque fois que vous le pouvez.

|__+_|

La s variable peut contenir de zéro à n'importe quel nombre pratique de caractères. La chaîne s'agrandit ou se rétrécit au fur et à mesure que vous lui affectez de nouvelles données.



Nous pouvons utiliser n'importe quelle variable de chaîne comme un tableau de caractères, le deuxième caractère dans s a l'indice 2. Le code suivant

|__+_|

assigne J au deuxième caractère du s variable. Maintenant, les quelques premiers personnages de s ressembler: TTe s str... .
Ne vous y trompez pas, vous ne pouvez pas utiliser s[0] pour voir la longueur de la chaîne, s n'est pas ShortString.



Comptage de références, copie sur écriture

Comme l'allocation de mémoire est effectuée par Delphi, nous n'avons pas à nous soucier de la récupération de place. Lorsque vous travaillez avec des chaînes longues (Ansi), Delphi utilise le comptage de références. De cette façon, la copie de chaînes est en fait plus rapide pour les chaînes longues que pour les chaînes courtes.
Comptage de références, par exemple :

|__+_|

Lorsque nous créons une chaîne s1 variable et lui affectez une valeur, Delphi alloue suffisamment de mémoire pour la chaîne. Quand on copie s1 à s2 , Delphi ne copie pas la valeur de chaîne en mémoire, il augmente uniquement le nombre de références et modifie le s2 pour pointer vers le même emplacement mémoire que s1 .



Pour minimiser la copie lorsque nous passons des chaînes aux routines, Delphi utilise la technique de copie sur écriture. Supposons que nous devions modifier la valeur de s2 variable de chaîne ; Delphi copie la première chaîne vers un nouvel emplacement mémoire, puisque la modification ne devrait affecter que s2, pas s1, et qu'ils pointent tous les deux vers le même emplacement mémoire.

Chaîne large

Les chaînes larges sont également allouées et gérées dynamiquement, mais elles n'utilisent pas le comptage de références ni la sémantique de copie sur écriture. Les chaînes larges sont constituées de caractères Unicode 16 bits.



À propos des jeux de caractères Unicode

Le jeu de caractères ANSI utilisé par Windows est un jeu de caractères à un octet. Unicode stocke chaque caractère du jeu de caractères sur 2 octets au lieu de 1. Certaines langues nationales utilisent des caractères idéographiques, qui nécessitent plus que les 256 caractères pris en charge par l'ANSI. Avec la notation 16 bits, nous pouvons représenter 65 536 caractères différents. L'indexation des chaînes multi-octets n'est pas fiable, car si] représente le ième octet (pas nécessairement le ième caractère) dans s .

Si vous devez utiliser des caractères larges, vous devez déclarer une variable chaîne comme étant du type WideString et votre variable caractère du type WideChar. Si vous souhaitez examiner une chaîne large un caractère à la fois, assurez-vous de tester les caractères à plusieurs bits. Delphi ne prend pas en charge les conversions de type automatiques entre les types de chaîne Ansi et Wide.

|__+_|

Nul terminé

Une chaîne terminée par zéro ou zéro est un tableau de caractères, indexé par un entier commençant à zéro. Comme le tableau n'a pas d'indicateur de longueur, Delphi utilise le caractère ASCII 0 (NULL ; #0) pour marquer la limite de la chaîne.
Cela signifie qu'il n'y a essentiellement aucune différence entre une chaîne terminée par un caractère nul et un tableau[0..NombreDeChars] de type Char, où la fin de la chaîne est marquée par #0.

Nous utilisons des chaînes à terminaison nulle dans Delphi lors de l'appel des fonctions de l'API Windows. Object Pascal nous permet d'éviter de jouer avec des pointeurs vers des tableaux de base zéro lors de la gestion de chaînes terminées par un caractère nul en utilisant le type PChar. Considérez un PChar comme un pointeur vers une chaîne terminée par un caractère nul ou vers le tableau qui en représente un. Pour plus d'informations sur les pointeurs, consultez : Pointeurs dans Delphi .

Par exemple, Le GetDriveType La fonction API détermine si un lecteur de disque est un lecteur amovible, fixe, CD-ROM, RAM ou réseau. La procédure suivante répertorie tous les lecteurs et leurs types sur l'ordinateur d'un utilisateur. Placez un composant Button et un composant Memo sur un formulaire et affectez un gestionnaire OnClick à un Button :

|__+_|

Mélanger les cordes de Delphi

Nous pouvons mélanger librement les quatre types de chaînes différents, Delphi donnera le meilleur pour donner un sens à ce que nous essayons de faire. L'affectation s:=p, où s est une variable chaîne et p est une expression PChar, copie une chaîne terminée par un caractère nul dans une longue chaîne.

Types de caractères

En plus des quatre types de données de chaîne, Delphi a trois types de caractères : Carboniser , AnsiCharName , et ​ WideChar . Une constante de chaîne de longueur 1, telle que 'T', peut désigner une valeur de caractère. Le type de caractère générique est Char, qui équivaut à AnsiChar. Les valeurs WideChar sont des caractères 16 bits classés selon le jeu de caractères Unicode. Les 256 premiers caractères Unicode correspondent aux caractères ANSI.