Comme avec tout langage de programmation, 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 typeChaîne.
Delphi fournit un assortiment sain d'opérateurs de chaînes, de fonctions et de procédures. Avant d'assigner 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 la chaîne courte est pour la compatibilité descendante.
Pour créer une variable de type ShortString, nous utilisons:
var s: chaîne courte; s: = 'Programmation Delphi'; // S_Length: = Ord (s [0])); // qui est le même que la longueur (s)
le s 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 du gaspillage - il est peu probable que votre chaîne courte se propage à la longueur maximale - seconde approche de l'utilisation de chaînes courtes utilise des sous-types de chaîne courte, dont la longueur maximale est comprise entre 0 et 255.
var ssmall: String [50]; ssmall: = 'Chaîne courte, jusqu'à 50 caractères';
Cela crée une variable appelée petite 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 de Delphi, elles sont converties vers et depuis une chaîne longue.
String / Long / Ansi
Delphi 2 apporté à Object Pascal Longue chaîne type. La 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.
var s: String; s: = 'La chaîne s peut être de n'importe quelle taille ...';
le s La variable peut contenir de zéro à n'importe quel nombre pratique de caractères. La chaîne s'agrandit ou se rétrécit à mesure que vous lui affectez de nouvelles données.
Nous pouvons utiliser n'importe quelle variable chaîne comme un tableau de caractères, le deuxième caractère de s a l'index 2. Le code suivant
s [2]: = 'T';
assigne T 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
Étant donné que 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:
var s1, s2: String; s1: = 'première chaîne'; s2: = s1;
Quand on crée une chaîne s1 et lui attribuer une valeur, Delphi alloue suffisamment de mémoire à la chaîne. Quand nous copions s1 à s2, Delphi ne copie pas la valeur de la 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 transmettons des chaînes aux routines, Delphi utilise une technique de copie sur écriture. Supposons que nous devons changer la valeur de la s2 variable chaîne; Delphi copie la première chaîne dans un nouvel emplacement mémoire, car le changement ne devrait affecter que s2, pas s1, et 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 ou la sémantique de copie sur écriture. Les chaînes larges sont composé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 dans 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 ANSI. Avec la notation 16 bits, nous pouvons représenter 65 536 caractères différents. L'indexation des chaînes multioctets 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 multibites. Delphi ne prend pas en charge les conversions de types automatiques entre les types Ansi et Wide string.
var s: WideString; c: WideChar; s: = 'Delphi_ Guide'; s [8]: = 'T'; //s='Delphi_TGuide';
Null 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 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..NumberOfChars] de type Char, où la fin de la chaîne est marquée par # 0.
Nous utilisons des chaînes terminées par null dans Delphi lors de l'appel des fonctions de l'API Windows. Object Pascal nous permet d'éviter de déconner avec des pointeurs vers des tableaux à base zéro lors de la manipulation de chaînes terminées par null 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, GetDriveType La fonction API détermine si un lecteur de disque est amovible, fixe, CD-ROM, disque RAM ou lecteur réseau. La procédure suivante répertorie tous les lecteurs et leurs types sur un ordinateur utilisateur. Placez un bouton et un composant Mémo sur une fiche et affectez un gestionnaire OnClick d'un bouton:
procédure TForm1.Button1Click (expéditeur: TObject); var Drive: Char; DriveLetter: String [4]; commencerpour Lecteur: = 'A' à «Z» fairecommencer DriveLetter: = Drive + ': \'; Cas GetDriveType (PChar (Drive + ': \')) de DRIVE_REMOVABLE: Memo1.Lines. Ajouter (DriveLetter + 'Floppy Drive'); DRIVE_FIXED: Memo1.Lines. Ajouter (DriveLetter + 'Fixed Drive'); DRIVE_REMOTE: Memo1.Lines. Ajouter (DriveLetter + 'Network Drive'); DRIVE_CDROM: Memo1.Lines. Ajouter (DriveLetter + 'Lecteur de CD-ROM'); DRIVE_RAMDISK: Memo1.Lines. Ajouter (DriveLetter + 'RAM Disk'); fin; fin; fin;
Mélanger les cordes de Delphi
Nous pouvons mélanger librement les quatre types de chaînes, Delphi fera de son mieux 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 de quatre types de données de chaîne, Delphi a trois types de caractères: Carboniser, AnsiChar, etWideChar. Une constante de chaîne de longueur 1, telle que «T», peut indiquer une valeur de caractère. Le type de caractère générique est Char, ce 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.