„Delphi“ stygų tipai („Delphi“ pradedantiesiems)

vyras naudoja nešiojamąjį kompiuterį

Vaizdo šaltinis RF/Cadalpe/Getty Images





Kaip ir bet kuriai programavimo kalbai, in Delphi , kintamieji yra rezervuotos vietos, naudojamos reikšmėms saugoti; jie turi pavadinimus ir duomenų tipus. Kintamojo duomenų tipas nustato, kaip tas reikšmes reprezentuojantys bitai saugomi kompiuterio atmintyje.

Kai turime kintamąjį, kuriame bus tam tikras simbolių masyvas, galime paskelbti, kad jis yra tipo Styga .
Delphi siūlo sveiką eilučių operatorių, funkcijų ir procedūrų asortimentą. Prieš priskirdami eilutės duomenų tipą kintamajam, turime gerai suprasti keturis Delphi eilučių tipus.



Trumpa styga

Paprasčiau pasakius, Trumpa styga yra suskaičiuotas (ANSII) simbolių masyvas, kurio eilutėje yra iki 255 simbolių. Pirmasis šio masyvo baitas saugo eilutės ilgį. Kadangi tai buvo pagrindinis „Delphi 1“ (16 bitų „Delphi“) eilutės tipas, vienintelė priežastis naudoti „Short String“ yra atgalinis suderinamumas.
Norėdami sukurti ShortString tipo kintamąjį, naudojame:

|_+_|


The s kintamasis yra trumpos eilutės kintamasis, galintis turėti iki 256 simbolių, jo atmintyje yra statiškai skiriami 256 baitai. Kadangi tai paprastai yra švaistoma – mažai tikėtina, kad jūsų trumpoji eilutė išplis iki maksimalaus ilgio, antrasis būdas naudoti „Short String“ yra „ShortString“ potipiai, kurių didžiausias ilgis yra nuo 0 iki 255.



|_+_|

Tai sukuria kintamąjį, vadinamą mažas kurio didžiausias ilgis yra 50 simbolių.

Pastaba: Kai trumposios eilutės kintamajam priskiriame reikšmę, eilutė sutrumpinama, jei ji viršija maksimalų tipo ilgį. Kai trumpas eilutes perduodame kokiai nors Delphi eilučių manipuliavimo tvarkai, jos konvertuojamos į ilgą eilutę ir iš jos.

Styga / Ilgas / Ansi

Delphi 2 atneštas į Object Pascal Ilga styga tipo. Ilga eilutė (Delphi žinyne AnsiString) reiškia dinamiškai paskirstytą eilutę, kurios maksimalų ilgį riboja tik turima atmintis. Visose 32 bitų Delphi versijose pagal numatytuosius nustatymus naudojamos ilgos eilutės. Kai tik galite, rekomenduoju naudoti ilgas stygas.

|_+_|

The s kintamasis gali apimti nuo nulio iki bet kokio praktinio simbolių skaičiaus. Eilutė didėja arba mažėja, kai jai priskiriate naujų duomenų.



Mes galime naudoti bet kurį eilutės kintamąjį kaip simbolių masyvą, antrąjį simbolį s turi indeksą 2. Šis kodas

|_+_|

paskiria T prie antrojo simbolio os the s kintamasis. Dabar keli pirmieji veikėjai s atrodyti kaip: TTe s str... .
Neapsigaukite, negalite naudoti s[0], kad pamatytumėte eilutės ilgį, s nėra ShortString.



Nuorodų skaičiavimas, kopijavimas-rašymas

Kadangi atminties paskirstymą atlieka „Delphi“, mums nereikia rūpintis šiukšlių išvežimu. Dirbdamas su ilgomis (Ansi) stygomis, Delphi naudoja nuorodų skaičiavimą. Tokiu būdu eilučių kopijavimas iš tikrųjų yra greitesnis ilgoms eilutėms nei trumpoms eilutėms.
Nuorodų skaičiavimas, pavyzdžiu:

|_+_|

Kai sukuriame eilutę s1 kintamąjį ir priskirkite jam tam tikrą reikšmę, Delphi skiria pakankamai atminties eilutei. Kai kopijuojame s1 į s2 , Delphi nekopijuoja eilutės reikšmės atmintyje, tik padidina nuorodų skaičių ir pakeičia s2 norėdami nurodyti tą pačią atminties vietą kaip s1 .



Kad sumažintų kopijavimą, kai eilutes perduodame įprastoms programoms, „Delphi“ naudoja kopijavimo rašant techniką. Tarkime, kad turime pakeisti reikšmę s2 eilutės kintamasis; „Delphi“ nukopijuoja pirmąją eilutę į naują atminties vietą, nes pakeitimas turėtų turėti įtakos tik s2, o ne s1, ir jie abu nukreipia į tą pačią atminties vietą.

Plati styga

Plačios eilutės taip pat yra dinamiškai paskirstomos ir valdomos, tačiau jos nenaudoja nuorodų skaičiavimo ar kopijavimo rašant semantikos. Plačias eilutes sudaro 16 bitų unikodo simboliai.



Apie Unicode simbolių rinkinius

„Windows“ naudojamas ANSI simbolių rinkinys yra vieno baito simbolių rinkinys. „Unicode“ kiekvieną simbolių rinkinio simbolį išsaugo 2 baitais, o ne 1. Kai kuriose nacionalinėse kalbose naudojami ideografiniai simboliai, kuriems reikia daugiau nei 256 ANSI palaikomų simbolių. Naudodami 16 bitų žymėjimą galime pavaizduoti 65 536 skirtingus simbolius. Kelių baitų eilučių indeksavimas nėra patikimas, nes s[i] reiškia i-ąjį baitą (nebūtinai i-ąjį simbolį). s .

Jei turite naudoti plačius simbolius, turite paskelbti, kad eilutės kintamasis yra WideString tipo, o simbolių kintamasis yra WideChar tipo. Jei norite tirti plačią eilutę po vieną simbolį, būtinai patikrinkite, ar nėra kelių įkandimų simbolių. Delphi nepalaiko automatinių tipų konvertavimo tarp Ansi ir Wide eilučių tipų.

|_+_|

Nutrauktas nulinis

Nulinio arba nulio pabaigos eilutė yra simbolių masyvas, indeksuojamas sveikuoju skaičiumi, prasidedančiu nuo nulio. Kadangi masyvas neturi ilgio indikatoriaus, „Delphi“ naudoja ASCII 0 (NULL; #0) simbolį eilutės ribai pažymėti.
Tai reiškia, kad iš esmės nėra skirtumo tarp nulinės eilutės ir Char tipo masyvo[0..NumberOfChars], kur eilutės pabaiga pažymėta #0.

Iškviesdami „Windows API“ funkcijas, „Delphi“ naudojame nulinio termino eilutes. Objektas Pascal leidžia mums nemaišyti su rodyklėmis į nulio pagrindu pagrįstus masyvus, kai tvarkome nulinio galo eilutes naudojant PChar tipą. Pagalvokite apie PChar kaip rodyklę į nulinę eilutę arba į masyvą, kuris ją reiškia. Norėdami gauti daugiau informacijos apie nuorodas, patikrinkite: Rodyklės Delfyje .

Pavyzdžiui, The GetDriveType API funkcija nustato, ar disko įrenginys yra keičiamas, fiksuotas, kompaktinis diskas, RAM diskas ar tinklo įrenginys. Toliau pateikiami visi diskai ir jų tipai vartotojo kompiuteryje. Į formą įdėkite vieną mygtuką ir vieną Atmintinės komponentą ir priskirkite mygtuko OnClick tvarkyklę:

|_+_|

Delphi stygų maišymas

Galime laisvai maišyti visas keturias skirtingas stygas, Delphi padės suprasti, ką mes stengiamės padaryti. Priskyrimas s:=p, kur s yra eilutės kintamasis, o p yra PChar išraiška, nukopijuoja nulinę eilutę į ilgą eilutę.

Veikėjų tipai

Be keturių eilučių duomenų tipų, „Delphi“ turi tris simbolių tipus: Char , AnsiChar , ir WideChar . 1 ilgio eilutės konstanta, pvz., „T“, gali reikšti simbolio reikšmę. Bendrasis simbolių tipas yra Char, kuris atitinka AnsiChar. WideChar reikšmės yra 16 bitų simboliai, išdėstyti pagal Unicode simbolių rinkinį. Pirmieji 256 Unikodo simboliai atitinka ANSI simbolius.