Vrste nizov v Delphiju

Kot v katerem koli programskem jeziku, tudi v Delphi, spremenljivke so rezervirana mesta za shranjevanje vrednosti; imajo imena in vrste podatkov. Tip podatkov spremenljivke določa, kako se bitji, ki predstavljajo te vrednosti, shranijo v računalniški pomnilnik.

Ko imamo spremenljivko, ki bo vsebovala niz matic, lahko razglasimo, da je tipaVrvica.
Delphi ponuja zdrav izbor ponudnikov nizov, funkcij in postopkov. Pred dodelitvijo podatkovne vrste String spremenljivki moramo temeljito razumeti štiri vrste vrst Delphi.

Kratek niz

Enostavno povedano, Kratek niz je šteti niz (ANSII) znakov z do 255 znaki v nizu. Prvi bajt tega niza shrani dolžino niza. Ker je bil to glavni niz nizov v Delphi 1 (16-bitni Delphi), je edini razlog za uporabo kratkega niza za nazaj združljivost.
Za ustvarjanje spremenljivke tipa ShortString uporabljamo:

var s: ShortString; s: = 'Programiranje Delphi'; // S_Length: = Ord (s [0])); // ki je enako dolžini


The s spremenljivka je kratka nizka spremenljivka, ki lahko vsebuje do 256 znakov, njen pomnilnik je statično dodeljen 256 bajtov. Ker je to običajno potratno - malo verjetno, da se bo vaša kratka vrvica razširila na največjo dolžino - sekundo pristop k uporabi kratkih strun uporablja podtipe ShortString, katerih največja dolžina je od 0 do 0 255.

instagram viewer

var ssmall: String [50]; ssmall: = 'Kratek niz, do 50 znakov';

To ustvari spremenljivko imenovano ssmall katerih največja dolžina je 50 znakov.

Opomba: Ko dodelimo vrednost spremenljivki Short String, je niz okrnjen, če presega največjo dolžino za vrsto. Ko posredujemo kratke nize v neko rutino, ki manipulira z nizo Delphi, se pretvorijo v dolg niz in iz njega.

String / Long / Ansi

Delphi 2 je prinesel Object Pascal Dolga struna tip. Dolga vrvica (v Delfovi pomoči AnsiString) predstavlja dinamično dodeljen niz, katerega največja dolžina je omejena le z razpoložljivim pomnilnikom. Vse 32-bitne različice Delphi privzeto uporabljajo dolge nize. Priporočam, da uporabljate dolge strune, kadar koli lahko.

var s: String; s: = 'Niz je lahko poljubne velikosti ...';

The s spremenljivka lahko vsebuje od nič do katerega koli praktičnega števila znakov. Niz raste ali se skrči, ko mu dodelite nove podatke.

Kot niz matic lahko uporabimo katero koli spremenljivko niza, drugi znak v s ima indeks 2. Naslednja koda

s [2]: = 'T';

dodeli T do drugega znaka os s spremenljivka. Zdaj je nekaj prvih likov v s izgleda kot: TTe s str ....
Ne zavajajte se, ne morete uporabiti s [0], da bi videli dolžino niza, s ni ShortString.

Štetje referenc, kopiranje ob pisanju

Ker dodeljevanje pomnilnika izvaja Delphi, nam ni treba skrbeti za zbiranje smeti. Pri delu z dolgimi (Ansi) strunami Delphi uporablja referenčno štetje. Tako je kopiranje niza dejansko hitrejše pri dolgih strunah kot pri kratkih strunah.
Štetje referenc, na primer:

var s1, s2: String; s1: = 'prvi niz'; s2: = s1;

Ko ustvarjamo niz s1 spremenljivko in ji dodelite nekaj vrednosti, Delphi dodeli dovolj pomnilnika za niz. Ko kopiramo s1 do s2, Delphi ne kopira vrednosti niza v pomnilnik, temveč le poveča referenčno število in spremeni vrednost s2 da kaže na isto mesto pomnilnika kot s1.

Da bi minimizirali kopiranje, ko strune prenašamo v rutine, Delphi uporablja tehniko kopiranja ob pisanju. Recimo, da spremenimo vrednost s2 spremenljivka niza; Delphi kopira prvi niz na novo pomnilniško mesto, saj naj bi sprememba vplivala le na s2, ne na s1 in oba kažeta na isto pomnilniško mesto.

Širok niz

Široki nizi so prav tako dinamično razporejeni in upravljani, vendar ne uporabljajo referenčnega štetja ali semantike kopiranja ob pisanju. Široke nize so sestavljene iz 16-bitnih znakov Unicode.

O nabora znakov Unicode

Nabor znakov ANSI, ki ga uporablja Windows, je enobajtni nabor znakov. Unicode shrani vsak znak v naboru znakov v 2 bajta namesto 1. Nekateri nacionalni jeziki uporabljajo ideografske znake, za katere je potrebnih več kot 256 znakov, ki jih podpira ANSI. S 16-bitnim zapisom lahko predstavljamo 65.536 različnih znakov. Indeksiranje večbajtnih nizov ni zanesljivo, saj s [i] predstavlja i bajt (ne nujno i-ti znak) v s.

Če morate uporabiti znake Wide, morate razglasiti, da je spremenljivka niza vrste WideString in vaša spremenljivka znakov tipa WideChar. Če želite preučiti en niz širok niz, se prepričajte, ali obstaja večbesedni znak. Delphi ne podpira samodejnih pretvorb vrst betwwen Ansi in Wide string vrst.

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

Nično zaključeno

Ničelni ali nič končani niz je niz znakov, indeksiran s celim številom, ki se začne od nič. Ker matrika nima indikatorja dolžine, Delphi uporablja ASCII 0 (NULL; # 0) znak za označitev meje niza.
To pomeni, da v bistvu ni razlike med ničelno končanim nizom in matriko [0..NumberOfChars] tipa Char, kjer je konec niza označen z # 0.

Pri klicanju funkcij sistema Windows API uporabljamo ničelne zaključke nizov v Delphiju. Objekt Pascal nam omogoča, da se pri obdelavi ničelnih nizov z uporabo PChar tipa izognemo zmečkanim kazalcem na ničelne matrike. Predstavljajte si PChar kot kazalec na ničelno končan niz ali na matriko, ki ga predstavlja. Če želite več informacij o kazalcih, preverite:Kazalci v Delfih.

Na primer The GetDriveType Funkcija API določa, ali je disk pogon odstranljiv, fiksni, CD-ROM, RAM disk ali omrežni pogon. Naslednji postopek navaja vse pogone in njihove vrste na uporabniškem računalniku. Na obrazec namestite eno tipko in eno opombo in dodelite OnClick upravljavcu gumba:

postopek TForm1.Button1Click (Pošiljatelj: TObject); var
Pogon: Char; DriveLetter: String [4]; začetiza Pogon: = 'A' do 'Z' storizačeti
DriveLetter: = Drive + ': \'; Ovitek GetDriveType (PChar (Drive + ': \')) od
DRIVE_REMOVABLE: Memo1.Lines. Dodaj (DriveLetter + 'disketa'); DRIVE_FIXED: Memo1.Lines. Dodaj (DriveLetter + 'Fiksni pogon'); DRIVE_REMOTE: Memo1.Lines. Dodaj (DriveLetter + 'Omrežni pogon'); DRIVE_CDROM: Memo1.Lines. Dodaj (DriveLetter + 'CD-ROM pogon'); DRIVE_RAMDISK: Memo1.Lines. Dodaj (DriveLetter + 'RAM disk'); konec; konec; konec;

Mešanje Delphievih strun

Svobodno lahko mešamo vse štiri različne vrste strun. Delphi bo dal najboljše smisel, kaj si prizadevamo. Dodelitev s: = p, kjer je s spremenljivka niza in p je izraz PChar, kopira ničelni niz v dolg niz.

Vrste znakov

Delphi poleg štirih vrst podatkovnih vrst ima tri vrste znakov: Char, AnsiChar, inWideChar. Nizka konstanta dolžine 1, na primer 'T', lahko označuje vrednost znaka. Vrsta generičnega znaka je Char, ki je enakovredna AnsiCharju. Vrednosti WideChar so 16-bitni znaki, razvrščeni glede na nabor znakov Unicode. Prvih 256 znakov Unicode ustreza znakom ANSI.