Zeichenfolgentypen in Delphi (Delphi für Anfänger)

Mann mit Laptop

Bildquelle RF/Cadalpe/Getty Images





Wie bei jeder Programmiersprache ist in Delphi , Variablen sind Platzhalter zum Speichern von Werten; sie haben Namen und Datentypen. Der Datentyp einer Variablen bestimmt, wie die Bits, die diese Werte darstellen, im Speicher des Computers gespeichert werden.

Wenn wir eine Variable haben, die ein Array von Zeichen enthält, können wir sie als Typ deklarieren Schnur .
Delphi bietet eine gesunde Auswahl an String-Operatoren, Funktionen und Prozeduren. Bevor wir einer Variablen einen String-Datentyp zuweisen, müssen wir die vier String-Typen von Delphi gründlich verstehen.



Kurze Zeichenfolge

Einfach gesagt, Kurze Zeichenfolge ist ein gezähltes Array von (ANSII) Zeichen mit bis zu 255 Zeichen in der Zeichenfolge. Das erste Byte dieses Arrays speichert die Länge der Zeichenfolge. Da dies der Haupt-String-Typ in Delphi 1 (16-Bit-Delphi) war, besteht der einzige Grund für die Verwendung von Short String in der Abwärtskompatibilität.
Um eine Variable vom Typ ShortString zu erstellen, verwenden wir:

|_+_|


Das s Variable ist eine Short-String-Variable, die bis zu 256 Zeichen aufnehmen kann, ihr Speicher beträgt statisch zugewiesene 256 Bytes. Da dies normalerweise verschwenderisch ist - es ist unwahrscheinlich, dass sich Ihre kurze Zeichenfolge auf die maximale Länge ausdehnt -, ist der zweite Ansatz zur Verwendung von Short Strings die Verwendung von Untertypen von ShortString, deren maximale Länge irgendwo zwischen 0 und 255 liegt.



|_+_|

Dadurch wird eine Variable namens erstellt klein dessen maximale Länge 50 Zeichen beträgt.

Hinweis: Wenn wir einer Short String-Variablen einen Wert zuweisen, wird die Zeichenfolge abgeschnitten, wenn sie die maximale Länge für den Typ überschreitet. Wenn wir kurze Strings an die String-Manipulationsroutine von Delphi übergeben, werden sie in und aus langen Strings konvertiert.

Zeichenkette / Lang / Ansi

Delphi 2 nach Object Pascal gebracht Lange Schnur Typ. Lange Zeichenfolgen (in Delphis Hilfe AnsiString) stellen eine dynamisch zugewiesene Zeichenfolge dar, deren maximale Länge nur durch den verfügbaren Speicher begrenzt ist. Alle 32-Bit-Delphi-Versionen verwenden standardmäßig lange Zeichenfolgen. Ich empfehle die Verwendung langer Saiten, wann immer Sie können.

|_+_|

Das s Variable kann von 0 bis zu einer beliebigen praktischen Anzahl von Zeichen enthalten. Die Zeichenfolge wächst oder schrumpft, wenn Sie ihr neue Daten zuweisen.



Wir können jede String-Variable als Array von Zeichen verwenden, das zweite Zeichen in s hat den Index 2. Der folgende Code

|_+_|

weist zu T zum zweiten Zeichen os the s Variable. Nun die wenigen der ersten Charaktere in s aussehen: TTes Str... .
Lassen Sie sich nicht täuschen, Sie können s[0] nicht verwenden, um die Länge der Zeichenfolge anzuzeigen. s ist nicht ShortString.



Referenzzählung, Copy-on-Write

Da die Speicherallokation von Delphi durchgeführt wird, müssen wir uns keine Sorgen um die Garbage Collection machen. Beim Arbeiten mit langen (Ansi) Strings verwendet Delphi die Referenzzählung. Auf diese Weise ist das Kopieren von Zeichenfolgen bei langen Zeichenfolgen tatsächlich schneller als bei kurzen Zeichenfolgen.
Referenzzählung am Beispiel:

|_+_|

Wenn wir eine Zeichenfolge erstellen s1 -Variable und weisen ihr einen Wert zu, weist Delphi genügend Speicher für die Zeichenfolge zu. Wenn wir kopieren s1 zu s2 , kopiert Delphi den String-Wert nicht in den Speicher, es erhöht nur die Referenzanzahl und ändert die s2 auf denselben Speicherplatz zeigen wie s1 .



Um das Kopieren zu minimieren, wenn wir Strings an Routinen übergeben, verwendet Delphi die Copy-on-Write-Technik. Angenommen, wir sollen den Wert von ändern s2 String-Variable; Delphi kopiert den ersten String an einen neuen Speicherort, da die Änderung nur s2 und nicht s1 betreffen sollte und beide auf denselben Speicherort zeigen.

Breite Schnur

Weite Zeichenfolgen werden ebenfalls dynamisch zugewiesen und verwaltet, verwenden jedoch keine Referenzzählung oder die Copy-on-Write-Semantik. Breite Zeichenfolgen bestehen aus 16-Bit-Unicode-Zeichen.



Über Unicode-Zeichensätze

Der von Windows verwendete ANSI-Zeichensatz ist ein Single-Byte-Zeichensatz. Unicode speichert jedes Zeichen im Zeichensatz in 2 Bytes anstelle von 1. Einige Landessprachen verwenden ideografische Zeichen, die mehr als die von ANSI unterstützten 256 Zeichen erfordern. Mit 16-Bit-Notation können wir 65.536 verschiedene Zeichen darstellen. Die Indizierung von Multibyte-Strings ist nicht zuverlässig, da s[ich] repräsentiert das i-te Byte (nicht unbedingt das i-te Zeichen) in s .

Wenn Sie Wide-Zeichen verwenden müssen, sollten Sie eine Zeichenfolgenvariable vom Typ WideString und Ihre Zeichenvariable vom Typ WideChar deklarieren. Wenn Sie eine breite Zeichenfolge zeichenweise untersuchen möchten, achten Sie darauf, auf Mehrbitzeichen zu testen. Delphi unterstützt keine automatischen Typkonvertierungen zwischen Ansi- und Wide-String-Typen.

|_+_|

Null beendet

Eine null- oder nullterminierte Zeichenfolge ist ein Array von Zeichen, das durch eine Ganzzahl beginnend bei Null indiziert wird. Da das Array keinen Längenindikator hat, verwendet Delphi das ASCII-Zeichen 0 (NULL; #0), um die Grenze des Strings zu markieren.
Das heißt, es gibt im Wesentlichen keinen Unterschied zwischen einem nullterminierten String und einem Array[0..NumberOfChars] vom Typ Char, bei dem das Ende des Strings durch #0 gekennzeichnet ist.

Wir verwenden nullterminierte Strings in Delphi, wenn wir Windows-API-Funktionen aufrufen. Mit Object Pascal können wir es vermeiden, mit Zeigern auf nullbasierte Arrays herumzuspielen, wenn wir nullterminierte Strings verarbeiten, indem wir den PChar-Typ verwenden. Stellen Sie sich ein PChar als einen Zeiger auf eine nullterminierte Zeichenfolge oder auf das Array vor, das eine solche darstellt. Weitere Informationen zu Zeigern finden Sie unter: Zeiger in Delphi .

Zum Beispiel Die GetDriveType Die API-Funktion bestimmt, ob ein Laufwerk ein entfernbares, festes, CD-ROM-, RAM-Laufwerk oder Netzlaufwerk ist. Das folgende Verfahren listet alle Laufwerke und ihre Typen auf dem Computer eines Benutzers auf. Platzieren Sie eine Button- und eine Memo-Komponente auf einem Formular und weisen Sie einem Button einen OnClick-Handler zu:

|_+_|

Delphis Saiten mischen

Wir können alle vier verschiedenen Arten von Zeichenfolgen frei mischen, Delphi wird das Beste geben, um zu verstehen, was wir zu tun versuchen. Die Zuweisung s:=p, wobei s eine String-Variable und p ein PChar-Ausdruck ist, kopiert einen nullterminierten String in einen langen String.

Zeichentypen

Zusätzlich zu den vier String-Datentypen hat Delphi drei Zeichentypen: Verkohlen , AnsiChar , und WideChar . Eine Zeichenfolgenkonstante der Länge 1, z. B. 'T', kann einen Zeichenwert bezeichnen. Der generische Zeichentyp ist Char, was AnsiChar entspricht. WideChar-Werte sind 16-Bit-Zeichen, die gemäß dem Unicode-Zeichensatz geordnet sind. Die ersten 256 Unicode-Zeichen entsprechen den ANSI-Zeichen.