System.SysUtils.CharLength
Delphi
function CharLength(const S: UnicodeString; Index: Integer): Integer;
C++
extern DELPHI_PACKAGE int __fastcall CharLength(const System::UnicodeString S, int Index)/* overload */;
Propriétés
Type | Visibilité | Source | Unité | Parent |
---|---|---|---|---|
function | public | System.SysUtils.pas System.SysUtils.hpp |
System.SysUtils | System.SysUtils |
Description
Renvoie le nombre d'octets utilisés par un caractère.
Appelez CharLength pour déterminer la taille en octets du caractère commençant à la position Index
dans S
. Si le caractère ne commence pas à la position Index
, cette fonction renvoie la taille du reste du caractère, et non la longueur totale du caractère.
Remarque :
Index
est un index d'élément dansS
, et non un index de caractère ou d'octet.
Si S
est un AnsiString et si le système n'utilise pas un système de caractères multi-octets (MBCS), CharLength renvoie toujours 1.
L'exemple suivant illustre l'opération CharLength.
type
SJISString = type AnsiString(932);
var
A: SJISString;
L: Integer;
begin
A := 'A' + 'B' + #$82#$A0 + // Japanese Hiragana 'A'
#$82#$A2 + // Japanese Hiragana 'I'
#$82#$A4 + // Japanese Hiragana 'U'
'C' + 'D';
L := CharLength(A, 1); //renvoie 1 ('A')
L := CharLength(A, 2); //renvoie 1 ('B')
L := CharLength(A, 3); //renvoie 2
L := CharLength(A, 4); //renvoie 1
end.
Dans cet exemple, quand l'index vaut 1 ou 2, il pointe sur le début d'un caractère à octet unique, la fonction renvoie alors 1. Quand l'index vaut 3, il pointe sur le début d'un caractère à deux octets, la fonction renvoie alors 2. Quand l'index vaut 4, il pointe sur la seconde moitié d'un caractère à deux octets, la fonction renvoie alors 1. Sachez que pour cet exemple, la taille d'élément est 1. Certains caractères nécessitent deux éléments, et d'autres seulement un élément.
CharLength peut être utilisée pour localiser la position des caractères multi-octets dans une chaîne.
Cette fonction fonctionne aussi pour les caractères Unicode :
var
U: UnicodeString;
L: Integer;
begin
U := 'abc';
L := SysUtils.CharLength(U,1); //renvoie 2
L := SysUtils.CharLength(U,2); //renvoie 2
U := #$20BB7; // paire de substitution
L := SysUtils.CharLength(U,1); //renvoie 4
L := SysUtils.CharLength(U,2); //renvoie 2
end.
Sachez que pour cet exemple la taille d'élément est 2, et que le caractère de paire de substitution est constitué de deux éléments.
Quand la chaîne vaut abc
, chaque caractère est un élément à deux octets unique, la fonction renvoie alors 2. Les littéraux chaîne sont Unicode par défaut.
Pour la paire de substitution, quand l'index vaut 1, il pointe sur le premier élément du caractère, la fonction renvoie alors 4. Quand l'index vaut 2, il pointe sur le second élément du caractère et la fonction renvoie 2.