Typy reťazcov v Delphi

click fraud protection

Rovnako ako u iných programovacích jazykov, aj v Delphi, premenné sú zástupné symboly používané na ukladanie hodnôt; majú mená a typy údajov. Dátový typ premennej určuje, ako sa bity predstavujúce tieto hodnoty ukladajú do pamäte počítača.

Ak máme premennú, ktorá bude obsahovať niekoľko znakov, môžeme ju vyhlásiť za typpovrázok.
Delphi poskytuje zdravý sortiment reťazcových operátorov, funkcií a postupov. Pred priradením dátového typu String k premennej musíme dôkladne porozumieť štyrom typom reťazcov Delphi.

Krátky reťazec

Jednoducho povedané, Krátky reťazec je počítané pole (ANSII) znakov s až 255 znakmi v reťazci. Prvý bajt tohto poľa ukladá dĺžku reťazca. Pretože to bol hlavný typ reťazca v Delphi 1 (16 bitový Delphi), jediný dôvod na použitie Short String je kvôli spätnej kompatibilite.
Na vytvorenie premennej typu ShortString používame:

var s: ShortString; s: = 'Delphi programovanie'; // S_Length: = Ord (s [0])); // ktoré je rovnaké ako dĺžka (y)


s Premenná je premenná s krátkym reťazcom schopná pojať až 256 znakov, jej pamäť je staticky pridelená 256 bajtov. Pretože je to zvyčajne zbytočné - nepravdepodobne sa váš krátky reťazec rozšíri na maximálnu dĺžku - sekundu prístup k používaniu krátkych reťazcov používa podtypy ShortString, ktorých maximálna dĺžka je kdekoľvek od 0 do 255.

instagram viewer

var ssmall: String [50]; ssmall: = 'Krátky reťazec, do 50 znakov';

Takto sa vytvorí premenná s názvom ssmall ktorých maximálna dĺžka je 50 znakov.

Poznámka: Keď priradíme hodnotu premennej Short String, reťazec sa skráti, ak prekročí maximálnu dĺžku pre daný typ. Keď odovzdáme krátke reťazce do nejakej rutiny manipulácie s reťazcami spoločnosti Delphi, konvertujú sa na a z dlhého reťazca.

String / Long / Ansi

Delphi 2 priniesol Object Pascal Dlhý reťazec typu. Dlhý reťazec (v pomoci spoločnosti Delphi AnsiString) predstavuje dynamicky pridelený reťazec, ktorého maximálna dĺžka je obmedzená iba dostupnou pamäťou. Všetky 32-bitové verzie Delphi štandardne používajú dlhé reťazce. Odporúčam používať dlhé reťazce, kedykoľvek je to možné.

var s: String; s: = 'Reťazec s môže mať akúkoľvek veľkosť ...';

s Premenná môže obsahovať od nuly po akýkoľvek praktický počet znakov. Reťazec rastie alebo zmenšuje, keď k nemu priradíte nové údaje.

Ľubovoľnú reťazcovú premennú môžeme použiť ako pole znakov, druhý znak v s má index 2. Nasledujúci kód

s [2]: = 'T';

prideľuje T na druhý znak s variabilné. Teraz niekoľko prvých znakov v s vyzerať ako: TTe s str ....
Nenechajte sa zavádzať, nemôžete použiť s [0] na zobrazenie dĺžky reťazca, s nie je ShortString.

Počítanie odkazov, kopírovanie na zápis

Keďže prideľovanie pamäte zaisťuje spoločnosť Delphi, nemusíme sa starať o zber odpadu. Pri práci s dlhými reťazcami (Ansi) používa spoločnosť Delphi počítanie referenčných hodnôt. Týmto spôsobom je kopírovanie reťazcov vlastne rýchlejšie pre dlhé reťazce ako pre krátke reťazce.
Referenčné počítanie, napríklad:

var s1, s2: String; s1: = 'prvý reťazec'; s2: = s1;

Keď vytvoríme reťazec s1 premennej a priraďuje jej nejakú hodnotu, Delphi pridelí pre reťazec dostatok pamäte. Keď kopírujeme s1 na s2, Delphi neskopíruje hodnotu reťazca v pamäti, iba zvýši počet referencií a zmení s2 smerovať na rovnaké miesto v pamäti ako s1.

Aby sa minimalizovalo kopírovanie pri odovzdávaní reťazcov rutinám, spoločnosť Delphi používa techniku ​​kopírovania a zápisu. Predpokladajme, že máme zmeniť hodnotu s2 reťazcová premenná; Delphi skopíruje prvý reťazec do nového umiestnenia pamäte, pretože zmena by mala ovplyvniť iba s2, nie s1 a obe smerujú na rovnaké miesto v pamäti.

Široký reťazec

Široké reťazce sú tiež dynamicky alokované a spravované, ale nepoužívajú počítanie referenčných hodnôt ani sémantiku kopírovania a zápisu. Široké reťazce pozostávajú zo 16-bitových znakov Unicode.

Informácie o znakových sadách Unicode

Znaková sada ANSI, ktorú používa Windows, je jednobajtová znaková sada. Unicode ukladá každý znak do znakovej sady v 2 bajtoch namiesto 1. Niektoré národné jazyky používajú ideografické znaky, ktoré vyžadujú viac ako 256 znakov podporovaných ANSI. Pri 16-bitovej notácii môžeme reprezentovať 65 536 rôznych znakov. Indexovanie viacbajtových reťazcov nie je spoľahlivé, pretože s [i] predstavuje i-tý bajt (nie nevyhnutne i-tý znak) v s.

Ak musíte použiť znaky Wide, mali by ste deklarovať reťazcovú premennú typu WideString a svoju znakovú premennú typu WideChar. Ak chcete preskúmať jeden reťazec naraz, nezabudnite otestovať viacmiestne znaky. Delphi nepodporuje automatické prevody typov medzi typmi Ansi a Wide.

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

Null ukončená

Nulový alebo nulový reťazec zakončený reťazcom je pole znakov, indexované celým číslom začínajúcim od nuly. Pretože pole nemá indikátor dĺžky, Delphi používa ASCII 0 (NULL; # 0) znak na označenie hranice reťazca.
To znamená, že v podstate neexistuje žiadny rozdiel medzi reťazcom ukončeným nulovou hodnotou a poľom [0..NumberOfChars] typu Char, kde je koniec reťazca označený znakom 0.

Pri volaní funkcií rozhrania Windows API používame reťazce ukončené nulovou hodnotou v Delphi. Objekt Pascal nám umožňuje vyhnúť sa posúvaniu správ s ukazovateľmi na nulové polia pri spracovávaní reťazcov zakončených nulovou hodnotou pomocou typu PChar. Považujte PChar za ukazovateľ na reťazec ukončený nulovou hodnotou alebo na pole, ktoré ho predstavuje. Viac informácií o ukazovateľoch nájdete na:Ukazovatele v Delphi.

Napríklad The GetDriveType Funkcia API určuje, či je disková jednotka vymeniteľná, pevná, CD-ROM, RAM alebo sieťová jednotka. Nasledujúci postup uvádza zoznam všetkých jednotiek a ich typov v počítači používateľov. Do formulára vložte jedno tlačidlo a jednu poznámku a priraďte manipuláciu s tlačidlom OnClick:

procedúra TForm1.Button1Click (Sender: TObject); var
Jednotka: Char; DriveLetter: String [4]; začaťpre Cesta: = 'A' na 'Z' robiťzačať
DriveLetter: = Drive + ': \'; púzdro GetDriveType (PChar (Drive + ': \')) z
DRIVE_REMOVABLE: Memo1.Lines. Pridať (DriveLetter + „Disketová jednotka“); DRIVE_FIXED: Memo1.Lines. Pridať (DriveLetter + „Pevná jednotka“); DRIVE_REMOTE: Memo1.Lines. Pridať (DriveLetter + „Sieťová jednotka“); DRIVE_CDROM: Memo1.Lines. Pridať (DriveLetter + 'Jednotka CD-ROM'); DRIVE_RAMDISK: Memo1.Lines. Pridať (DriveLetter + „RAM Disk“); koniec; koniec; koniec;

Miešanie reťazcov Delphi

Môžeme voľne kombinovať všetky štyri rôzne reťazce, Delphi dá to najlepšie, aby dávala zmysel tomu, čo sa snažíme robiť. Priradenie s: = p, kde s je reťazcová premenná ap je PChar výraz, skopíruje reťazec ukončený nulou do dlhého reťazca.

Typy znakov

Okrem štyroch typov dát reťazca má Delphi tri typy znakov: spáliť, AnsiCharaWideChar. Reťazcová konštanta dĺžky 1, napríklad „T“, môže označovať znakovú hodnotu. Druh generického znaku je Char, čo je ekvivalentné s AnsiChar. Hodnoty WideChar sú 16-bitové znaky zoradené podľa znakovej sady Unicode. Prvých 256 znakov Unicode zodpovedá znakom ANSI.

instagram story viewer