lundi 29 janvier 2001

Chaine de caractère

CHAÎNE DE CARACTÈRE

Type de chaîne

Chaîne courte

Les chaînes courtes ont une longueur fixe, elles ne peuvent dépasser plus de 255 caractères. Étant donné que les chaînes courtes ont une valeur fixe, leurs vitesses d'exécution sont très rapides. On peut les déclarer de deux façons, mais une seule est vraiment utile.

var
   Nom:shortstring;
   Prenom:string[30];

Lorsqu'on utilise shortstring, la longueur de la variable est automatiquement de 255 caractères. A moins d'avoir absolument besoin de 255 caractères, il n'est pas vraiment intéressant d'utiliser le type shortstring. Il est intéressant d'utiliser les chaînes courtes lorsqu'on sait que la longueur de la variable sera fixe ou que l'on sait le nombre de caractère maximum qu'il peut y avoir.

Le gain de vitesse sera appréciable si l'on fait beaucoup de manipulation sur les chaînes. Le premier élément d'une chaîne courte représente la longueur de la chaîne, ce qui peut s'avérer intéressant dans certaines situations.

Chaîne longue

Les chaînes longues sont allouées dynamiquement. Leur longueur est limitée à la taille de votre mémoire disponible. Tout le traitement pour allonger et réduire la taille de la chaîne est fait en coulisse, mais on perd un peu de vitesse.

var
  Nom:string;
  Prenom:string;

Les chaînes longues n'ont pas d'élément zéro.

Chaîne à zéro terminal

Ce type de chaîne est très utilisé lorsqu'on doit utiliser les fonctions de Windows. Les fonctions de Windows utilisent des tableaux de caractères (langage c) et utilisent donc un 0 à la fin de la chaîne afin de marquer la fin de la chaîne. On doit utiliser le type PChar lorsqu'on manipule les fonctions de windows ou bien faire de la conversion.

var
  libelle : string;
begin
  libelle := 'Bonjour'; messagebox (0, PCHAR(libelle), 'Message', mb_ok);
end;

Ce code utilise un api (très simple) afin d'afficher une boîte de message

Routine de gestion de chaîne

Voici quelques fonctions et procédures disponibles, il en existe de nombreuses autres.

Routines de traitement de chaîne AZT


Fonction Description
StrAlloc Alloue une zone tampon d'une taille donnée sur le tas.
StrBufSize Renvoie la taille d'une zone tampon de caractère alloué en utilisant StrAlloc ou StrNew.
StrCat Concatène deux chaînes.
StrComp Compare deux chaînes.
StrCopy Copie une chaîne.
StrDispose Dispose une zone tampon de caractère allouée en utilisant StrAlloc ou StrNew.
StrECopy Copie une chaîne et renvoie un pointeur à la fin de la chaîne.
StrEnd Renvoie un pointeur à la fin d'une chaîne.
StrFmt Formate une ou plusieurs valeurs dans une chaîne.
StrIComp Compare deux chaînes sans tenir compte des majuscules/minuscules.
StrLCat Concatène deux chaînes avec une longueur maximum donnée de la chaîne résultante.
StrLComp Compare deux chaînes pour une longueur maximum donnée.
StrLCopy Copie une chaîne jusqu'à une longueur maximum donnée.
StrLen Renvoie la longueur d'une chaîne.
StrLFmt Formate une ou plusieurs valeurs dans une chaîne avec une longueur maximum donnée.
StrLIComp Compare deux chaînes pour une longueur maximum donnée sans tenir compte des majuscules/minuscules.
StrLower Convertit une chaîne en minuscules.
StrMove Déplace un bloc de caractères d'une chaîne sur l'autre.
StrNew Alloue une chaîne sur le tas.
StrPCopy Copie une chaîne Pascal vers une chaîne à zéro terminal.
StrPLCopy Copie une chaîne Pascal vers une chaîne AZT avec une longueur maximum donnée.
StrPos Renvoie un pointeur sur la première occurrence d'une sous-chaîne donnée dans une chaîne.
StrRScan Renvoie un pointeur sur la dernière occurrence d'un caractère donné dans une chaîne.
StrScan Renvoie un pointeur sur la première occurrence d'un caractère donné dans une chaîne.
StrUpper Convertit une chaîne en majuscules.

Routines de traitement de chaînes shortstring (chaîne Pascal)


Fonction Description
AdjustLineBreaks Transforme les ruptures de lignes dans une chaîne en séquences CR/LF.
AnsiCompareStr Comparaison, en tenant compte des majuscules/minuscules, de deux chaînes.
AnsiCompareText Comparaison, sans tenir compte des majuscules/minuscules, de deux chaînes.
AnsiLowerCase Convertit des caractères en minuscules.
AnsiUpperCase Convertit des caractères en majuscules.
CompareStr Comparaison, en tenant compte des majuscules/minuscules, de deux chaînes.
CompareText Comparaison, sans tenir compte des majuscules/minuscules, de deux chaînes.
Concat Concatène une suite de chaînes.
Copy Renvoie une sous-chaîne d'une chaîne.
Delete Efface une sous-chaîne d'une chaîne.
DisposeStr Libère une chaîne du tas.
FmtLoadStr Charge une chaîne dans la ressource table de chaînes d'un programme.
Insert Insère une sous-chaîne dans une chaîne.
IntToHex Convertit un entier en hexadécimal.
IntToStr Convertit un entier en chaîne.
IsValidIdent Renvoie True si la chaîne spécifiée est un identificateur valide.
Length Renvoie la longueur dynamique de la chaîne.
LoadStr Charge la ressource chaîne depuis le fichier exécutable de l'application.
LowerCase Met en minuscule la chaîne spécifiée.
NewStr Alloue une nouvelle chaîne dans le tas.
Pos Recherche une sous-chaîne dans une chaîne.
Str Convertit une valeur numérique en chaîne.
StrToInt Convertit une chaîne en entier.
StrToIntDef Convertit une chaîne en entier ou à une valeur par défaut.
Trim Supprime les espaces de début et de fin et les caractères de contrôle d'une chaîne donnée.
TrimLeft Supprime les espaces de début et les caractères de contrôle d'une chaîne donnée
TrimRight Supprime les espaces de fin et les caractères de contrôle d'une chaîne donnée.
UpperCase Met en majuscule la chaîne spécifiée.
Val Convertit une valeur chaîne en sa représentation numérique.

StringList

Les stringlist permettent de gérer un tableau de phrase. Chaque ligne du tableau peut être accédées grâce à son index.

De nombreuses opérations peuvent être effectuées sur les stringlist: insertion, effacement, comparaison...

La création d'une stringlist est très aisée.

lstNom : TStrings; 
// Déclaration de TStrings au lieu de TStringList 
//pour des d'utilisations de paramatètres de la vcl.
//Création d'une instance de TStringList
lstNom := TStringList.Create;
//Ajout de chaîne dans la liste
lstNom.Add('Paul Smith');
lstNom.Add('Renée');
lstNom.Add('Nicolas');
Nom:=lstNom[2];
//insertion de plage dans la variable nom
insert('plage',Nom,3);
lstNom[2]:=Nom;

Les routines de traitement peuvent être facilement effectuées sur les stringslist.