Keelutüübid Delphis

Nagu iga programmeerimiskeele puhul, nii ka keeles Delphi, muutujad on väärtuste salvestamiseks kasutatavad kohahoidjad; neil on nimed ja andmetüübid. Muutuja andmetüüp määrab, kuidas neid väärtusi esindavaid bitte arvuti mällu hoitakse.

Kui meil on muutuja, mis sisaldab mõnda tähemärkide massiivi, võime kuulutada, et see on tüüpiKeel.
Delphi pakub keelpillide operaatorite, funktsioonide ja protseduuride tervislikku valikut. Enne muutujale stringi andmetüübi omistamist peame Delphi neli stringi tüüpi põhjalikult mõistma.

Lühike keelpill

Lihtsamalt öeldes: Lühike keelpill on loendatud (ANSII) tähemärkide koosseis, milles string võib sisaldada kuni 255 tähemärki. Selle massiivi esimene bait salvestab stringi pikkuse. Kuna see oli Delphi 1-s peamine stringi tüüp (16-bitine Delphi), on lühikese stringi kasutamise ainus põhjus tagurpidi ühilduvus.
ShortStringi tüüpi muutuja loomiseks kasutame:

var s: Lühike; s: = 'Delphi programmeerimine'; // S_Pikkus: = Ord (s [0])); // mis on sama kui pikkus (ed)
instagram viewer


s muutuja on lühike stringimuutuja, mis mahutab kuni 256 tähemärki, selle mälu on staatiliselt eraldatud 256 baiti. Kuna see on tavaliselt raiskav - ebatõenäoline, et teie lühike nöör levib maksimaalse pikkusega - teine Lühike stringide kasutamise lähenemisviisiks on ShortStringi alamtüübid, mille maksimaalne pikkus võib olla vahemikus 0 kuni 255.

var ssmall: Keel [50]; ssmall: = 'Lühike string, kuni 50 tähemärki';

See loob muutuja nimega ssmall mille maksimaalne pikkus on 50 tähemärki.

Märkus. Kui määrame lühikese stringi muutujale väärtuse, siis string lühendatakse, kui see ületab tüübi maksimaalset pikkust. Kui edastame lühikese stringi mõne Delphi stringi manipuleeriva rutiiniga, teisendatakse need pikaks stringiks.

Keel / pikk / Ansi

Delphi 2 tõi objekti Pascal Pikk keel tüüp. Pikk string (Delphi abiga AnsiString) tähistab dünaamiliselt eraldatud stringi, mille maksimaalset pikkust piirab ainult saadaolev mälu. Kõik 32-bitised Delphi versioonid kasutavad vaikimisi pikki stringe. Soovitan igal võimalusel kasutada pikki stringe.

var s: keel; s: = 'String võib olla mis tahes suurusega ...';

s Muutuja mahutab nullist praktilise arvu märkideni. String kasvab või kahaneb, kui määrate sellele uusi andmeid.

Tähemärkide massiivina võime kasutada mis tahes stringimuutujat, teine ​​märk - s omab indeksit 2. Järgmine kood

s [2]: = 'T';

määrab T teisele märgile os s muutuja. Nüüd on mõned esimesed tegelased seal s välja nägema: TTe s ....
Ärge eksitage, stringi pikkuse nägemiseks ei saa kasutada s [0], s ei ole Lühike.

Viidete loendamine, kopeerimine-kirjutamine

Kuna mälu jaotamise teeb Delphi, ei pea me prügiveo pärast muretsema. Pikkade (Ansi) keelpillidega töötades kasutab Delphi referentsloendust. Nii on stringi kopeerimine pikkade stringide puhul tegelikult kiirem kui lühikeste stringide puhul.
Võrdlusloendus näite järgi:

var s1, s2: keel; s1: = 'esimene string'; s2: = s1;

Kui loome stringi s1 muutujale ja määrake sellele mingi väärtus, eraldab Delphi stringi jaoks piisavalt mälu. Kui me kopeerime s1 kuni s2, Delphi ei kopeeri stringi väärtust mällu, see ainult suurendab viidete arvu ja muudab s2, et osutada samale mälupesale nagu s1.

Kopeerimise minimeerimiseks, kui stringe anname rutiinidele, kasutab Delphi kopeerimise-kirjutamise tehnikat. Oletame, et peame muutma väärtust s2 stringimuutuja; Delphi kopeerib esimese stringi uude mälupessa, kuna muudatus peaks mõjutama ainult s2, mitte s1 ja mõlemad osutavad samale mälupesale.

Lai keel

Ka laiad stringid on dünaamiliselt eraldatud ja hallatavad, kuid need ei kasuta võrdlusloendust ega copy-on-write semantikat. Laiad stringid koosnevad 16-bitistest Unicode-tähemärkidest.

Unicode'i märgikomplektide kohta

Windowsi kasutatav ANSI-märgikomplekt on ühebaidine märgistik. Unicode salvestab tähemärgikomplekti kõik märgid 1 asemel 2 baiti. Mõnes riigikeeles kasutatakse ideograafilisi tähemärke, mis nõuavad rohkem kui 256 märki, mida ANSI toetab. 16-bitise märkimisega saame esindada 65 536 erinevat tähemärki. Mitmebaidiste stringide indekseerimine pole usaldusväärne, kuna s [i] tähistab i-ndat baiti (mitte tingimata i-ndat tähemärki) s.

Kui peate kasutama laiasid märke, peaksite kuulutama stringimuutuja tüübi WideString ja tüübi muutuja WideChar tüübi. Kui soovite uurida laia stringi üks märk korraga, siis kontrollige kindlasti mitmebaidiseid tähemärke. Delphi ei toeta automaatset tüüpi teisendamist betwwen Ansi ja Wide stringi tüüpidele.

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

Null lõpetatud

Null või null lõpetav string on tähemärkide massiiv, mida indekseeritakse täisarvuga, mis algab nullist. Kuna massiivil puudub pikkuse indikaator, kasutab Delphi ASCII 0 (NULL; # 0) märk, mis tähistab stringi piiri.
See tähendab, et null-otsaga stringi ja Char-tüüpi massiivi [0..NumberOfChars] vahel pole põhimõtteliselt vahet, kus stringi lõppu tähistatakse numbriga 0.

Windows API funktsioonide kutsumisel kasutame Delphis null-otsaga stringe. Object Pascal võimaldab meil null-otsaga stringide töötlemisel PChari abil vältida segamist nullpõhiste massiividega. Mõelge PChar-le kui null-otsaga stringi või massiivi, mis seda tähistab, osutile. Lisateavet osutite kohta leiate järgmiselt:Näpunäited Delphis.

Näiteks The GetDriveType API funktsioon määrab, kas kettadraiv on eemaldatav, fikseeritud, CD-ROM, RAM-ketas või võrgudraiv. Järgmine protseduur loetleb kõik draivid ja nende tüübid kasutaja arvutis. Pange vormile üks nupp ja üks memo komponent ning määrake nupu käitleja OnClick:

protseduur TForm1.Button1Click (saatja: TObject); var
Sõida: Char; DriveLetter: string [4]; alustadajaoks Sõida: = 'A' kuni 'Z' tehaalustada
DriveLetter: = Drive + ': \'; juhtum GetDriveType (PChar (Drive + ': \')) kohta
DRIVE_REMOVABLE: Memo1.Lines. Lisa (DriveLetter + 'disketiseade'); DRIVE_FIXED: Memo1.Lines. Lisa (DriveLetter + 'Fikseeritud draiv'); DRIVE_REMOTE: Memo1.Lines. Lisa (DriveLetter + 'Network Drive'); DRIVE_CDROM: Memo1.Lines. Lisa (DriveLetter + 'CD-ROM draiv'); DRIVE_RAMDISK: Memo1.Lines. Lisa (DriveLetter + 'RAM ketas'); lõpp; lõpp; lõpp;

Delphi keelpillide segamine

Saame vabalt segada kõiki nelja erinevat keelpilli, Delphi annab kõige paremini mõista, mida me proovime teha. Ülesanne s: = p, kus s on stringimuutuja ja p on PChar-avaldis, kopeerib null-otsaga stringi pikaks stringiks.

Märkide tüübid

Lisaks neljale stringi andmetüübile on Delphil kolm märgitüüpi: Char, AnsiCharjaWideChar. Stringi konstant pikkusega 1, näiteks „T”, võib tähistada tähemärgi väärtust. Üldine märgitüüp on Char, mis on samaväärne AnsiChariga. WideChari väärtused on 16-bitised märgid, mis on järjestatud vastavalt Unicode'i märgikomplektile. Esimesed 256 Unicode-tähemärki vastavad ANSI-tähemärkidele.

instagram story viewer