Kuten minkä tahansa ohjelmointikielen tapauksessa Delfoi, muuttujat ovat paikkamerkkejä, joita käytetään arvojen tallentamiseen; heillä on nimet ja tietotyypit. Muuttujan tietotyyppi määrittelee, kuinka näitä arvoja edustavat bitit tallennetaan tietokoneen muistiin.
Kun meillä on muuttuja, joka sisältää joitain merkkejä, voimme julistaa sen olevan tyyppinenjono.
Delphi tarjoaa terveellisen valikoiman merkkijono-operaattoreita, toimintoja ja menettelytapoja. Ennen kuin määrität merkkijonotietotyypin muuttujalle, meidän on ymmärrettävä perusteellisesti Delphin neljä merkkityyppiä.
Lyhyt merkkijono
Yksinkertaistettuna, Lyhyt merkkijono on laskettu joukko (ANSII) merkkejä, merkkijonossa enintään 255 merkkiä. Tämän taulukon ensimmäinen tavu tallentaa merkkijonon pituuden. Koska tämä oli Delphi 1: n tärkein merkkijonotyyppi (16-bittinen Delphi), ainoa syy käyttää lyhyitä merkkijonoja on taaksepäin yhteensopiva.
Luodaamme ShortString-tyyppistä muuttujaa:
var s: oikosulku; s: = 'Delphi-ohjelmointi'; // S_Pituus: = Ord (s [0])); // joka on sama kuin pituus (s)
s muuttuja on lyhyt merkkimuuttuja, joka pystyy pitämään korkeintaan 256 merkkiä, sen muisti on staattisesti varattu 256 tavua. Koska tämä on yleensä tuhlaavaa - epätodennäköistä, että lyhyt merkkisi leviää maksimipituuteen - sekuntiin lähestymistapa lyhyiden merkkijonojen käyttämiseen käyttää ShortString-alatyyppejä, joiden enimmäispituus on missä tahansa välillä 0 - 255.
var nsmall: merkkijono [50]; ssmall: = 'Lyhyt merkkijono, enintään 50 merkkiä';
Tämä luo muuttujan nimeltä ssmall jonka enimmäispituus on 50 merkkiä.
Huomaa: Kun määritämme arvon lyhyelle merkkijonolle, merkkijono katkaistaan, jos se ylittää tyypin enimmäispituuden. Kun siirrämme lyhyet jouset joihinkin Delphin merkkijonojen manipulointirutiineihin, ne muunnetaan pitkäksi merkkijonoksi.
Kieli / Pitkä / Ansi
Delphi 2 toi esine Pascaliin Pitkä merkkijono tyyppi. Pitkä merkkijono (Delphin ohjeessa AnsiString) edustaa dynaamisesti allokoitua merkkijonoa, jonka maksimipituutta rajoittaa vain käytettävissä oleva muisti. Kaikki 32-bittiset Delphi-versiot käyttävät oletuksena pitkiä merkkijonoja. Suosittelen käyttämään pitkiä kieliä aina kun pystyt.
var s: merkkijono; s: = 'Merkkijono voi olla minkä kokoinen tahansa ...';
s muuttuja voi pitää nollasta mihin tahansa käytännön määrään merkkejä. Merkkijono kasvaa tai kutistuu, kun annat sille uutta tietoa.
Voimme käyttää mitä tahansa merkkimuuttujaa merkkijonoina, toinen merkki sisään s on indeksi 2. Seuraava koodi
s [2]: = 'T';
siirronsaajat T toiseen merkkiin os s muuttuja. Nyt muutama ensimmäisestä merkistä s näyttää kuin: TTe str ....
Älä ole harhaanjohtava, et voi käyttää s [0] nähdäksesi merkkijonon pituuden, s ei ole ShortString.
Viitelaskenta, kopioi-kirjoita
Koska muistinvarauksen tekee Delphi, meidän ei tarvitse huolehtia jätteiden keruusta. Kun työskentelee pitkien (ansi) jousien kanssa, Delphi käyttää vertailulukemista. Tällä tavalla merkkijonon kopiointi on itse asiassa nopeampaa pitkille kielille kuin lyhyille.
Viitelaskenta esimerkiksi:
var s1, s2: merkkijono; s1: = 'ensimmäinen merkkijono'; s2: = s1;
Kun luomme merkkijonoa s1 ja määritä sille arvo, Delphi varaa merkkijonolle tarpeeksi muistia. Kun kopioimme s1 että s2, Delphi ei kopioi merkkijonon arvoa muistiin, se vain lisää referenssimäärää ja muuttaa s2 osoittaa samaan muistipaikkaan kuin s1.
Kopioinnin minimoimiseksi, kun siirrämme merkkijonot rutiineihin, Delphi käyttää copy-on-write tekniikkaa. Oletetaan, että aiomme muuttaa s2 merkkijono muuttuja; Delphi kopioi ensimmäisen merkkijonon uuteen muistipaikkaan, koska muutoksen pitäisi vaikuttaa vain s2: een, ei s1: ään, ja molemmat osoittavat samaan muistipaikkaan.
Leveä kieli
Leveät merkkijonot on myös allokoitu ja hallittu dynaamisesti, mutta ne eivät käytä viitelaskentaa tai copy-on-write semantiikkaa. Leveät merkkijonot koostuvat 16-bittisistä Unicode-merkeistä.
Tietoja Unicoden merkistöistä
Windowsin käyttämä ANSI-merkistö on yhden tavun merkistö. Unicode tallentaa merkkijoukon jokaisen merkin 2 tavuun yhden sijasta. Jotkut kansalliset kielet käyttävät ideografisia merkkejä, jotka vaativat enemmän kuin 256 merkkiä, joita ANSI tukee. 16-bittisellä merkinnällä voimme edustaa 65 536 eri merkkiä. Monitavuisten merkkijonojen indeksointi ei ole luotettavaa, koska si] edustaa kymmentä tavua (ei välttämättä i: tä merkkiä) s.
Jos sinun on käytettävä laajamerkkejä, sinun on julistettava merkkijonomuuttuja WideString-tyypiksi ja merkkimuuttujasi WideChar-tyypiksi. Jos haluat tutkia laajan merkkijonon yksi merkki kerrallaan, muista testata monibittimerkit. Delphi ei tue automaattisia tyyppimuunnoksia betwwen Ansi- ja Wide-merkkijonotyypeissä.
var s: WideString; c: WideChar; s: = 'Delphi_ Guide'; s [8]: = 'T'; //s='Delphi_TGuide';
Null päättyi
Nollattu tai nolla päättyvä merkkijono on merkistöjoukko, jonka indeksoidaan kokonaisluku nollasta alkaen. Koska taulukossa ei ole pituusindikaattoria, Delphi käyttää ASCII 0 (NULL; # 0) merkki merkkijonon rajan merkitsemiseksi.
Tämä tarkoittaa, että nollapääteisen merkkijonon ja Char-tyypin taulukon [0..NumberOfChars] välillä, jolla merkkijonon loppu on merkitty numerolla # 0, ei ole olennaista eroa.
Käytämme tyhjiä merkkijonoja Delphissä, kun soitamme Windows API -toimintoihin. Object Pascal antaa meidän välttää sekaannusta osoittimien kanssa nollapohjaisiin taulukkoihin käsitellessä nollapääteisiä merkkijonoja käyttämällä PChar-tyyppiä. Ajattele PChar: ta osoittimena nollasta päättyvälle merkkijonolle tai sitä kuvaavalle taulukolle. Lisätietoja osoittimista, tarkista:Osoittimet Delphissä.
Esimerkiksi The GetDriveType API-toiminto määrittää, onko levyasema irrotettava, kiinteä, CD-ROM-, RAM-levy tai verkkoasema. Seuraava menettely luettelee kaikki käyttäjän tietokoneella olevat asemat ja niiden tyypit. Sijoita yksi painike ja yksi muistokomponentti lomakkeelle ja määritä painikkeen OnClick-käsittelijä:
menettely TForm1.Button1Click (Lähettäjä: TObject); var Ajo: Char; DriveLetter: merkkijono [4]; alkaavarten Asema: = 'A' että 'Z' tehdäalkaa DriveLetter: = Drive + ': \'; tapaus GetDriveType (PChar (Drive + ': \')) of DRIVE_REMOVABLE: Memo1.Lines. Lisää (DriveLetter + 'Levykeasema'); DRIVE_FIXED: Memo1.Lines. Lisää (DriveLetter + 'Kiinteä asema'); DRIVE_REMOTE: Memo1.Lines. Lisää (DriveLetter + 'Network Drive'); DRIVE_CDROM: Memo1.Lines. Lisää (DriveLetter + 'CD-ROM-asema'); DRIVE_RAMDISK: Memo1.Lines. Lisää (DriveLetter + 'RAM-levy'); pää; pää; pää;
Sekoitetaan Delphin jousia
Voimme sekoittaa vapaasti kaikki neljä erilaista jouset, Delphi antaa parhaan ymmärtää, mitä yritämme tehdä. Tehtävä s: = p, jossa s on merkkimuuttuja ja p on PChar-lauseke, kopioi nollaterminaalisen merkkijonon pitkään merkkijonoon.
Merkkityypit
Neljän merkkijonotiedotyypin lisäksi Delphissä on kolme merkityyppiä: char, AnsiCharjaWideChar. Merkkijonovakio, jonka pituus on 1, kuten 'T', voi merkitä merkkiarvoa. Yleinen merkityyppi on Char, joka vastaa AnsiCharia. WideChar-arvot ovat 16-bittisiä merkkejä, jotka on järjestetty Unicode-merkistöjen mukaan. Ensimmäiset 256 Unicode-merkkiä vastaavat ANSI-merkkejä.