Kaip ir bet kuria programavimo kalba, Delfi, kintamieji yra vietos žymekliai, naudojami vertėms saugoti; jie turi vardus ir duomenų tipus. Kintamojo duomenų tipas lemia, kaip šias reikšmes reprezentuojantys bitai yra saugomi kompiuterio atmintyje.
Kai turime kintamąjį, kuriame bus keletas simbolių masyvo, galime paskelbti, kad jis yra tipoStygos.
„Delphi“ siūlo sveiką stygų operatorių, funkcijų ir procedūrų asortimentą. Prieš priskirdami eilutės duomenų tipą kintamajam, turime išsamiai suprasti keturis Delphi eilutės tipus.
Trumpa styga
Paprasčiau pasakius, Trumpa styga yra suskaičiuotas (ANSII) simbolių rinkinys, kurio eilutėje yra iki 255 ženklų. Pirmasis šio masyvo baitas išsaugo eilutės ilgį. Kadangi tai buvo pagrindinis „Delphi 1“ (16 bitų „Delphi“) stygų tipas, vienintelė priežastis naudoti trumpąsias eilutes yra suderinama atgal.
Norėdami sukurti „ShortString“ tipo kintamąjį, mes naudojame:
var s: trumpoji styga; s: = 'Delphi programavimas'; // S_Length: = Ordas (s [0])); // kuris yra toks pat kaip ilgis (-iai)
s kintamasis yra trumpos eilutės kintamasis, galintis talpinti iki 256 simbolių, jo atmintis yra statiškai paskirta 256 baitai. Kadangi tai dažniausiai yra švaistymas - mažai tikėtina, kad jūsų trumpa styga pasiskirsto iki maksimalaus ilgio - antra požiūris į trumpų stygų naudojimą yra „ShortString“ potipiai, kurių maksimalus ilgis yra nuo 0 iki 255.
var ssmall: styga [50]; ssmall: = 'Trumpa eilutė, iki 50 ženklų';
Tai sukuria kintamąjį, vadinamą mažas kurio ilgis ne didesnis kaip 50 simbolių.
Pastaba: kai trumpajam styginiam kintamajam priskiriame vertę, eilutė sutrumpėja, jei ji viršija maksimalų tipo ilgį. Kai perduodame trumpas eilutes tam tikra „Delphi“ stygų manipuliavimo rutina, jos paverčiamos į ilgas stygas ir iš jų.
Styginiai / Ilgi / Ansi
„Delphi 2“ atvežtas į objektą Pascal Ilgas stygas tipo. Ilga eilutė („Delphi“ padeda „AnsiString“) žymi dinamiškai paskirstytą eilutę, kurios maksimalų ilgį riboja tik turima atmintis. Pagal numatytuosius nustatymus visose 32 bitų „Delphi“ versijose naudojamos ilgos eilutės. Aš rekomenduoju naudoti ilgas stygas, kai tik galite.
var s: Styga; s: = 'S eilutė gali būti bet kokio dydžio ...';
s kintamasis gali turėti nuo nulio iki bet kokio praktinio simbolių skaičiaus. Priskirdami jai naujus duomenis, eilutė auga arba traukiasi.
Mes galime naudoti bet kurį eilutės kintamąjį kaip simbolių masyvą, antrasis simbolis - s turi indeksą 2. Šis kodas
s [2]: = 'T';
paskiria T antrajam veikėjui s kintamasis. Dabar keletas pirmųjų simbolių s atrodyti kaip: TTe str ....
Negalima klaidinti, jūs negalite naudoti s [0], kad pamatytumėte stygos ilgį, s nėra „ShortString“.
Nuorodų skaičiavimas, kopijavimas-rašymas
Kadangi atmintį skiria „Delphi“, mes neturime jaudintis dėl šiukšlių rinkimo. Dirbdamas su ilgomis (Ansi) stygomis, „Delphi“ naudoja atskaitos skaičiavimą. Tokiu būdu ilgų stygų kopijavimas iš tikrųjų yra spartesnis nei trumpų.
Referencinis skaičiavimas pagal pavyzdį:
var s1, s2: Styga; s1: = 'pirmoji eilutė'; s2: = s1;
Kai mes sukuriame eilutę s1 ir priskirti tam tikrą reikšmę, Delphi skiria pakankamai atminties eilutei. Kai mes kopijuojame s1 į s2, Delphi nekopijuoja eilutės vertės atmintyje, ji tik padidina nuorodų skaičių ir keičia s2 nurodyti tą pačią atminties vietą kaip s1.
Norėdami sumažinti kopijavimą, kai perduodame eilutes kasdienybei, „Delphi“ naudoja kopijavimo ant rašymo techniką. Tarkime, kad turėsime pakeisti s2 stygų kintamasis; „Delphi“ nukopijuoja pirmąją eilutę į naują atminties vietą, nes pakeitimas turėtų paveikti tik s2, o ne s1, ir jie abu nurodo 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 semantikos kopijuojant ant rašymo. Plačios eilutės susideda iš 16 bitų „Unicode“ simbolių.
Apie „Unicode“ simbolių rinkinius
ANSI simbolių rinkinys, kurį naudoja „Windows“, yra vieno baito simbolių rinkinys. „Unicode“ kiekvienas simbolių rinkinio simbolis saugomas 2 baitais, o ne 1. Kai kurios nacionalinės kalbos naudoja ideografinius ženklus, kuriems reikia daugiau nei 256 simbolių, kuriuos palaiko ANSI. Turėdami 16 bitų žymėjimą galime pateikti 65 536 skirtingus simbolius. Daugiabaitų stygų indeksavimas nėra patikimas, nes s [i] žymi i-tąjį baitą (nebūtinai i-ąjį ženklą) s.
Jei turite naudoti „Wide“ ženklus, turėtumėte paskelbti, kad eilutės kintamasis yra „WideString“ tipo, o jūsų simbolių kintamasis - „WideChar“ tipo. Jei norite išnagrinėti plačią eilutę po vieną simbolį vienu metu, būtinai patikrinkite, ar nėra daugiabriaunių simbolių. „Delphi“ nepalaiko automatinių tipo konversijų tarp „Ansi“ ir „Wide“ tipų.
var s: „WideString“; c: „WideChar“; s: = 'Delphi_ vadovas'; s [8]: = 'T'; //s='Delphi_TGuide';
Nulis nutrauktas
Nulinė arba nulis baigta eilutė yra simbolių masyvas, indeksuojamas sveiku skaičiumi, prasidedančiu nuo nulio. Kadangi masyve nėra ilgio indikatoriaus, „Delphi“ naudoja ASCII 0 (NULL; # 0) simbolis, skirtas pažymėti eilutės kraštą.
Tai reiškia, kad iš esmės nėra jokio skirtumo tarp nulinės pabaigos eilutės ir „Char“ tipo masyvo [0..NumberOfChars], kur eilutės pabaiga pažymėta skaičiumi 0.
Skambindami „Windows API“ funkcijoms, „Delphi“ naudojame neterminuotas eilutes. Objektas Paskalis leidžia mums išvengti netvarkos su rodyklėmis iki nulio pagrįstų matricų, kai tvarkome niekines galines stygas, naudodami PChar tipą. Pagalvokite apie „PChar“ kaip žymeklį, kuriame nurodoma niekinė eilutė arba masyvas, žymintis vieną. Norėdami gauti daugiau informacijos apie rodykles, patikrinkite:Rodyklės Delfyje.
Pavyzdžiui, „GetDriveType“ API funkcija nustato, ar disko įrenginys yra nuimamas, fiksuotas, kompaktinis diskas, RAM diskas ar tinklo įrenginys. Šioje procedūroje išvardyti visi diskai ir jų tipai vartotojo kompiuteryje. Įdėkite vieną mygtuką ir vieną atmintinės komponentą į formą ir paskirkite „OnClick“ mygtuko tvarkyklę:
procedūra TForm1.Button1Click (Siuntėjas: TObject); var Vairuoti: Char; „DriveLetter“: eilutė [4]; prasidedadėl Važiavimas: = „A“ į „Z“ darytiprasideda „DriveLetter“: = „Drive + ': \'; atvejis „GetDriveType“ („PChar“ („Drive +“: \ ')) apie DRIVE_REMOVABLE: „Memo1.Lines“. Pridėti („DriveLetter“ + 'diskelių įrenginys'); DRIVE_FIXED: „Memo1.Lines“. Pridėti („DriveLetter“ + ‘Fiksuotasis diskas’); DRIVE_REMOTE: „Memo1.Lines“. Pridėti („DriveLetter“ + „Tinklo diskas“); DRIVE_CDROM: „Memo1.Lines“. Pridėti („DriveLetter +“ CD-ROM įrenginys); DRIVE_RAMDISK: „Memo1.Lines“. Pridėti (DriveLetter + 'RAM diskas'); galas; galas; galas;
Maišant Delphi stygas
Galime laisvai maišyti visas keturias skirtingas stygas, „Delphi“ duos, kad geriausia būtų suprasti, ką mes stengiamės. Priskyrimas s: = p, kur s yra eilutės kintamasis, o p yra PChar išraiška, nukopijuoja nulinę pabaigos eilutę į ilgą eilutę.
Veikėjų tipai
Be keturių eilutės duomenų tipų, „Delphi“ yra ir trys simbolių tipai: Char, „AnsiChar“ir„WideChar“. 1 ilgio eilutės konstanta, tokia kaip „T“, gali žymėti simbolio reikšmę. Bendrasis simbolio tipas yra „Char“, kuris yra lygiavertis „AnsiChar“. „WideChar“ reikšmės yra 16 bitų simboliai, išdėstyti pagal „Unicode“ simbolių rinkinį. Pirmieji 256 „Unicode“ simboliai atitinka ANSI ženklus.