Stringtyper i Delphi

Som med ethvert programmeringssprog, i Delphi, variabler er pladsholdere, der bruges til at gemme værdier; de har navne og datatyper. Datatypen for en variabel bestemmer, hvordan bitene, der repræsenterer disse værdier, gemmes i computerens hukommelse.

Når vi har en variabel, der vil indeholde en række karakterer, kan vi erklære at den er af typenSnor.
Delphi leverer et sundt sortiment af strengoperatører, funktioner og procedurer. Før vi tildeler en strengdatatype til en variabel, skal vi grundigt forstå Delphis fire strengtyper.

Kort streng

Kort fortalt, Kort streng er en talt matrix med (ANSII) tegn med op til 255 tegn i strengen. Den første byte i denne matrix lagrer strengens længde. Da dette var den vigtigste strengtype i Delphi 1 (16 bit Delphi), er den eneste grund til at bruge Short String for bagudkompatibilitet.
For at oprette en variabel ShortString-type bruger vi:

Var s: ShortString; s: = 'Delphi-programmering'; // S_Length: = Ord (s [0])); // hvilket er det samme som Længde (r)
instagram viewer


Det s variabel er en variabel med kort streng, der kan rumme op til 256 tegn, dens hukommelse er en statisk allokeret 256 bytes. Da dette normalt er spildt - usandsynligt vil din korte streng spredes til den maksimale længde - sekund tilgang til at bruge korte strenge bruger undertyper af ShortString, hvis maksimale længde er overalt fra 0 til 255.

Var ssmall: streng [50]; ssmall: = 'Kort streng, op til 50 tegn';

Dette skaber en kaldet variabel ssmall hvis maksimale længde er 50 tegn.

Bemærk: Når vi tildeler en værdi til en variabel til kort streng, trunker du strengen, hvis den overskrider den maksimale længde for typen. Når vi passerer korte strenge til nogle Delphis strenge manipulerende rutine, konverteres de til og fra lang streng.

Streng / lang / Ansi

Delphi 2 bragt til Object Pascal Lang streng type. Lang streng (i Delphis hjælp AnsiString) repræsenterer en dynamisk allokeret streng, hvis maksimale længde kun er begrænset af tilgængelig hukommelse. Alle 32-bit Delphi-versioner bruger lange strenge som standard. Jeg anbefaler at bruge lange strenge, når du kan.

Var s: streng; s: = 'Strengen s kan være af enhver størrelse ...';

Det s variabel kan indeholde fra nul til et hvilket som helst praktisk antal tegn. Strengen vokser eller krymper, når du tildeler nye data til den.

Vi kan bruge en hvilken som helst strengvariabel som en række tegn, den anden karakter i s har indekset 2. Følgende kode

s [2]: = 'T';

tildeler T til det andet tegn os s variabel. Nu er de få af de første tegn i s ligner: Disse str ....
Bliv ikke vildledt, du kan ikke bruge s [0] til at se længden på strengen, s er ikke ShortString.

Henvisningstælling, kopi-på-skrivning

Da hukommelsestildeling udføres af Delphi, behøver vi ikke bekymre os om indsamling af skrald. Når du arbejder med lange (Ansi) strenge, bruger Delphi referencetælling. På denne måde er strengekopiering faktisk hurtigere for lange strenge end for korte strenge.
Henvisningstælling, med eksempel:

Var s1, s2: streng; s1: = 'første streng'; s2: = s1;

Når vi opretter streng s1 variabel, og tildele en vis værdi til det, Delphi tildeler nok hukommelse til strengen. Når vi kopierer s1 til s2, Delphi kopierer ikke strengværdien i hukommelsen, den øger kun referenceantalet og ændrer s2 at pege på den samme hukommelsesplacering som s1.

For at minimere kopiering, når vi videresender strenge til rutiner, bruger Delphi copy-on-write-teknik. Antag, at vi skal ændre værdien af s2 strengvariabel; Delphi kopierer den første streng til en ny hukommelsesplacering, da ændringen kun skal påvirke s2, ikke s1, og begge peger på den samme hukommelsesplacering.

Bred streng

Brede strenge er også dynamisk allokeret og administreret, men de bruger ikke referencetælling eller kopi-på-skriv-semantik. Brede strenge består af 16-bit Unicode-tegn.

Om Unicode tegnsæt

ANSI-tegnsættet, der bruges af Windows, er et enkelt-bytes tegnsæt. Unicode gemmer hvert tegn i tegnsættet i 2 byte i stedet for 1. Nogle nationale sprog bruger ideografiske tegn, som kræver mere end de 256 tegn, der understøttes af ANSI. Med 16-bit notation kan vi repræsentere 65.536 forskellige tegn. Indeksering af multibytestrenge er ikke pålidelig, da s [i] repræsenterer ith-byte (ikke nødvendigvis den i-th karakter) i s.

Hvis du skal bruge Brede tegn, skal du erklære en strengvariabel til at være af typen WideString og din karaktervariabel af typen WideChar. Hvis du vil undersøge en bred streng et tegn ad gangen, skal du sørge for at teste for multibittegn. Delphi understøtter ikke konvertering af automatisk type mellem Ansi og Wide strengtyper.

Var s: WideString; c: WideChar; s: = 'Delphi_ Guide'; s [8]: = 'T'; //s='Delphi_TGuide';

Nul afsluttet

En nul- eller nul-afsluttet streng er en matrix med tegn, indekseret med et heltal startende fra nul. Da matrisen ikke har nogen længdeindikator, bruger Delphi ASCII 0 (NULL; # 0) tegn for at markere strengens grænse.
Dette betyder, at der i det væsentlige ikke er nogen forskel mellem en nul-afsluttet streng og en matrix [0..NummerOfChars] af typen Char, hvor enden af ​​strengen markeres med # 0.

Vi bruger nul-afsluttede strenge i Delphi, når vi kalder Windows API-funktioner. Objekt Pascal lader os undgå at rodde rundt med pegere til nulbaserede arrays, når vi håndterer nul-afsluttede strenge ved hjælp af PChar-typen. Tænk på en PChar som en markør til en nul-afsluttet streng eller til den matrix, der repræsenterer en. For mere information om pointere, se:Pegere i Delphi.

For eksempel The GetDriveType API-funktion bestemmer, om et diskdrev er et flytbart, fast, cd-rom-, RAM- eller netværksdrev. Følgende procedure viser alle drev og deres typer på en brugers computer. Placer en knap og en memo-komponent på en formular og tildel en OnClick-handler af en knap:

procedure TForm1.Button1Click (Afsender: TObject); Var
Drev: Char; DriveLetter: String [4]; begyndetil Drev: = 'A' til 'Z' gørebegynde
DriveLetter: = Drive + ': \'; sag GetDriveType (PChar (Drive + ': \')) af
DRIVE_REMOVABLE: Memo1.Lines. Tilføj (DriveLetter + 'Floppy Drive'); DRIVE_FIXED: Memo1.Lines. Tilføj (DriveLetter + 'Fixed Drive'); DRIVE_REMOTE: Memo1.Lines. Tilføj (DriveLetter + 'Network Drive'); DRIVE_CDROM: Memo1.Lines. Tilføj (DriveLetter + 'CD-ROM Drive'); DRIVE_RAMDISK: Memo1.Lines. Tilføj (DriveLetter + 'RAM Disk'); ende; ende; ende;

Blanding af Delphis strenge

Vi kan frit blande alle fire forskellige slags strenge, Delphi giver det bedst at give mening om, hvad vi prøver at gøre. Tildelingen s: = p, hvor s er en strengvariabel og p er et PChar-udtryk, kopierer en null-afsluttet streng til en lang streng.

Karaktertyper

Ud over fire strengdatatyper har Delphi tre karaktertyper: char, AnsiChar, ogWideChar. En strengkonstant med længde 1, såsom 'T', kan betegne en tegnværdi. Den generiske karaktertype er Char, som svarer til AnsiChar. WideChar-værdier er 16-bit tegn, der er ordnet i henhold til Unicode-tegnsættet. De første 256 Unicode-tegn svarer til ANSI-tegnene.

instagram story viewer