Vrste stringova u Delphiju

click fraud protection

Kao i u bilo kojem programskom jeziku, u Delphi, varijable su rezervirana mjesta koja se koriste za pohranjivanje vrijednosti; imaju imena i vrste podataka. Tip podataka varijable određuje kako se bitovi koji predstavljaju te vrijednosti pohranjuju u memoriji računala.

Kad imamo varijablu koja će sadržavati niz znakova, možemo je proglasiti tipomNiz.
Delphi nudi zdrav izbor asortimana stručnih operatera, funkcija i postupaka. Prije nego što vrsti string podataka dodijelimo varijabli, trebamo temeljito razumjeti Delphijeve četiri vrste stringova.

Kratki niz

Jednostavno rečeno, Kratki niz je prebrojeni niz znakova (ANSII) s do 255 znakova u nizu. Prvi bajt ovog polja pohranjuje duljinu niza. Budući da je ovo glavni tip niza u Delphi 1 (16-bitni Delphi), jedini razlog za korištenje kratkog niza je za kompatibilnost s nazad.
Za stvaranje varijable tipa ShortString koristimo:

var s: ShortString; s: = 'Delphi programiranje'; // S_Length: = Red (s [0])); // što je isto što i dužina


a varijabla je varijabla kratkog niza koja može sadržavati do 256 znakova, memorija joj je statički dodijeljena 256 bajtova. Budući da je ovo obično uzaludno - malo je vjerojatno da će se vaš kratki niz proširiti na maksimalnu duljinu - sekundu Pristup korištenju Short Strings koristi se podvrstima ShortString čija je maksimalna duljina od 0 do 255.

instagram viewer

var ssmall: Gudački [50]; ssmall: = 'Kratki niz, do 50 znakova';

To stvara varijablu zvanu ssmall čija je maksimalna duljina 50 znakova.

Napomena: Kada dodijelimo vrijednost varijabli Short String, niz se skraćuje ako prelazi maksimalnu duljinu za tip. Kad prosljeđujemo kratke žice na neke Delfijeve nizove koji manipuliraju rutinom, oni se pretvaraju u dugi niz i iz njega.

Gudački / dugi / Ansi

Delphi 2 donio je Object Pascal Dugi niz tip. Dugi niz (u Delfievoj pomoći AnsiString) predstavlja dinamički dodijeljeni niz čija je maksimalna duljina ograničena samo dostupnom memorijom. Sve 32-bitne Delphi verzije prema zadanim postavkama koriste duge žice. Preporučam da koristite duge žice kad god možete.

var s: Gudački; s: = 'Niz može biti bilo koje veličine ...';

a varijabla može sadržavati od nule do bilo kojeg praktičnog broja znakova. Niz raste ili se smanjuje kad mu dodijelite nove podatke.

Možemo koristiti bilo koju varijablu niza kao niz znakova, drugi znak u a ima indeks 2. Sljedeći kod

s [2]: = 'T';

dodjeljuje T do drugog znaka os a promjenjiva. Sada je nekoliko prvih likova u a izgledaju: TTe s str ....
Nemojte biti zavedeni, ne možete koristiti s [0] da biste vidjeli duljinu niza, a nije ShortString.

Brojanje referenci, kopiranje-pisanje

Budući da dodjelu memorije vrši Delphi, ne moramo brinuti o smeću. U radu s dugim (Ansi) nizovima Delphi koristi referentno brojanje. Ovako je kopiranje stringova zapravo brže za duge žice nego za kratke žice.
Brojanje referenca, na primjer:

var s1, s2: Gudački; s1: = 'prvi niz'; s2: = s1;

Kad stvaramo niz s1 varijabli i dodijeliti joj neku vrijednost, Delphi dodijeli dovoljno memorije za niz. Kad kopiramo s1 do s2, Delphi ne kopira vrijednost niza u memoriju, samo povećava broj referenci i mijenja vrijednost s2 da ukaže na isto mjesto memorije kao s1.

Da bi smanjili kopiranje kada dijelimo nizove u rutine, Delphi koristi tehniku ​​kopiranja-pisanja. Pretpostavimo da promijenimo vrijednost s2 string varijabla; Delphi kopira prvi niz na novo memorijsko mjesto, jer promjena treba utjecati na samo s2, a ne s1, i oba pokazuju na isto mjesto memorije.

Široki niz

Široki nizovi također se dinamički raspoređuju i upravljaju, ali ne koriste referentno brojanje niti semantiku kopiranja pri pisanju. Široki nizovi sastoje se od 16-bitnih Unicode znakova.

O skupovima znakova Unicode

ANSI skup znakova koji koristi Windows je jednobajtni skup znakova. Unicode pohranjuje svaki znak u skupu znakova u 2 bajta umjesto 1. Neki nacionalni jezici koriste ideografske znakove za koje je potrebno više od 256 znakova koje podržava ANSI. Sa 16-bitnom notacijom možemo predstaviti 65.536 različitih znakova. Indeksiranje višebajtnih nizova nije pouzdano, jer si] predstavlja i-ti bajt (nije nužno i-ti znak) u a.

Ako morate koristiti znakove Wide, trebali biste proglasiti varijablu niza tipa WideString i vašu znakovnu varijablu tipa WideChar. Ako želite ispitati široki niz pojedinačnih znakova, provjerite ima li višestrukih znakova. Delphi ne podržava automatske pretvorbe tipa betwwen Ansi i Široke vrste stringova.

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

Ništa se prekida

Nulti ili nulti završeni niz je niz znakova, indeksiran cijelim brojem koji počinje od nule. Budući da niz nema indikatora duljine, Delphi koristi ASCII 0 (NULL; # 0) znak za označavanje granice niza.
To znači da u biti nema razlike između niza koji je prestao sa nulom i nizom [0..NumberOfChars] tipa Char, gdje je kraj niza označen sa # 0.

Pri pozivanju funkcija Windows API koristimo nizove sa nizom završetka u Delphiju. Objekt Pascal omogućuje nam da izbjegnemo zabrljati niz s pokazateljima na nulte temeljene nizove prilikom rukovanja nizovima koji se završavaju nullom koristeći tip PChar. Pomislite na PChar kao na pokazivač na null-terminirani niz ili na niz koji ga predstavlja. Više informacija o pokazivačima potražite:Pokazivači u Delfima.

Na primjer, The GetDriveType API funkcija određuje je li disk pogon prijenosni, fiksni, CD-ROM, RAM disk ili mrežni pogon. Sljedeći postupak navodi sve pogone i njihove vrste na korisničkom računalu. Postavite jedan gumb i jednu komponentu Memo na obrazac i dodijelite onClick rukovatelju gumba:

postupak TForm1.Button1Click (Pošiljatelj: TObject); var
Pogon: Char; DriveLetter: string [4]; početiza Pogon: = 'A' do 'Z' činipočeti
DriveLetter: = Pogon + ': \'; slučaj GetDriveType (PChar (Pogon + ': \')) od
DRIVE_REMOVABLE: Memo1.Lines. Dodaj (DriveLetter + 'disketni pogon'); DRIVE_FIXED: Memo1.Lines. Dodaj (DriveLetter + 'Fiksni pogon'); DRIVE_REMOTE: Memo1.Lines. Dodaj (DriveLetter + 'Mrežni pogon'); DRIVE_CDROM: Memo1.Lines. Dodaj (DriveLetter + 'CD-ROM pogon'); DRIVE_RAMDISK: Memo1.Lines. Dodaj (DriveLetter + 'RAM disk'); kraj; kraj; kraj;

Miješanje Delphievih žica

Slobodno možemo miješati sve četiri različite vrste gudača, Delphi će dati najbolje da shvati što pokušavamo. Zadaća s: = p, gdje je s varijabla niza i p je PChar izraz, kopira null-terminirani niz u dugački niz.

Vrste znakova

Pored četiri vrste stringova podataka, Delphi ima tri vrste znakova: čađ, AnsiChar, iWideChar. Nizna konstanta duljine 1, poput "T", može značiti vrijednost znaka. Generička vrsta znakova je Char, što je ekvivalentno AnsiChar. Vrijednosti WideChar su 16-bitni znakovi poredani prema skupu znakova Unicode. Prvih 256 znakova Unicode odgovaraju ANSI znakovima.

instagram story viewer