System.SysUtils.CharLength

Aus RAD Studio API Documentation
Wechseln zu: Navigation, Suche

Delphi

function CharLength(const S: UnicodeString; Index: Integer): Integer;

C++

extern DELPHI_PACKAGE int __fastcall CharLength(const System::UnicodeString S, int Index)/* overload */;

Eigenschaften

Typ Sichtbarkeit Quelle Unit Übergeordnet
function public
System.SysUtils.pas
System.SysUtils.hpp
System.SysUtils System.SysUtils

Beschreibung

Gibt die Anzahl der von einem Zeichen verwendeten Bytes zurück.

Mit CharLength stellen Sie die Größe in Byte eines Zeichens, das bei bei Index beginnt, in S fest. Wenn das Zeichen nicht bei Index beginnt, gibt diese Funktion die Größe des Restes des Zeichens zurück, nicht die vollständige Zeichenlänge.

Hinweis: Index ist ein Elementindex in S und kein Byte- oder Zeichenindex.

Wenn S ein AnsiString ist und im System kein Multibyte-Zeichensatz (MBCS) verwendet wird, gibt CharLength immer den Wert 1 zurück.

Das folgende Beispiel verdeutlicht die Arbeitsweise von CharLength.

type
  SJISString = type AnsiString(932);

var
  A: SJISString;
  L: Integer;

begin
  A := 'A' + 'B' + #$82#$A0 +  // Japanisch Hiragana 'A'
  #$82#$A2 +  // Japanisch Hiragana 'I'
  #$82#$A4 +  // Japanisch Hiragana 'U'
  'C' + 'D';

  L := CharLength(A, 1);     //gibt 1 ('A') zurück
  L := CharLength(A, 2);     //gibt 1 ('B') zurück
  L := CharLength(A, 3);     //gibt 2 zurück
  L := CharLength(A, 4);     //gibt 1 zurück

end.

Wenn in diesem Beispiel der Index 1 oder 2 ist, zeigt er auf den Anfang eines Einzelbyte-Zeichens, daher gibt die Funktion 1 zurück. Wenn der Index 3 ist, zeigt er auf den Anfang eines Zweibyte-Zeichens, und die Funktion gibt 2 zurück. Wenn der Index 4 ist, zeigt er auf die zweite Hälfte eines Zweibyte-Zeichens, und die Funktion gibt 1 zurück. Beachten Sie bitte, dass in diesem Beispiel die Elementgröße 1 ist. Einige Zeichen benötigen zwei Elemente und einige nur ein Element.

CharLength kann zum Suchen der Position von Multibyte-Zeichen in einem String verwendet werden.

Die folgende Funktion funktioniert auch mit Unicode-Zeichen:

var
  U: UnicodeString;
  L: Integer;

begin
  U := 'abc';
  L := SysUtils.CharLength(U,1); //gibt 2 zurück
  L := SysUtils.CharLength(U,2); //gibt 2 zurück

  U := #$20BB7; //Surrogatpaar
  L := SysUtils.CharLength(U,1); //gibt 4 zurück
  L := SysUtils.CharLength(U,2); //gibt 2 zurück

end.

Beachten Sie bitte, dass die Elementgröße in diesem Beispiel 2 ist, und das Surrogatpaarzeichen aus zwei Elementen besteht.

Wenn der String abc ist, ist jedes Zeichen ein einzelnes Zweibyte-Element, daher gibt die Funktion 2 zurück. String-Literale sind per Vorgabe Unicode.

Bei dem Surrogatpaar zeigt der Index 1 auf das erste Element in dem Zeichen, daher gibt die Funktion 4 zurück. Wenn der Index 2 ist, zeigt er auf das zweite Element in dem Zeichen und gibt 2 zurück.

Siehe auch