Stringsoorte in Delphi
Soos met enige programmeertaal, in Delphi , is veranderlikes plekhouers wat gebruik word om waardes te stoor; hulle het name en datatipes. Die datatipe van 'n veranderlike bepaal hoe die bisse wat daardie waardes verteenwoordig, in die geheue van die rekenaar gestoor word.
As ons 'n veranderlike het wat 'n verskeidenheid karakters bevat, kan ons dit verklaar dat dit van tipe string is .
Delphi bied 'n gesonde verskeidenheid snaaroperateurs, funksies en prosedures.
Voordat u 'n String-datatipe aan 'n veranderlike toeken, moet ons Delphi se vier stringtipes deeglik verstaan.
Eenvoudig gestel, kortstring is 'n getel skikking van (ANSII) karakters, met tot 255 karakters in die tou. Die eerste byte van hierdie skikking stoor die lengte van die tou. Aangesien dit die hoofstring in Delphi 1 (16 bit Delphi) was, is die enigste rede om Short String te gebruik, vir agteruitkompatibiliteit.
Om 'n ShortString-tipe veranderlike te skep, gebruik ons:
var s: Short String; s: = 'Delphi Programming'; // S_Length: = Ord (s )); // wat dieselfde is as Lengte (s)
Die veranderlike is 'n kort string veranderlike wat tot 256 karakters kan hou. Die geheue is 'n staties toegewysde 256 grepe. Aangesien dit gewoonlik verspilling is, sal dit onwaarskynlik wees dat jou kort tou tot die maksimum lengte versprei. Tweede benadering tot die gebruik van kortstringe gebruik subtipes van ShortString, waarvan die maksimum lengte van 0 tot 255 is.
Var ssmall: String ; ssmall: = 'Kort string, tot 50 karakters';
Dit skep 'n veranderlike genaamd ssmall waarvan die maksimum lengte 50 karakters is.
Nota: wanneer ons 'n waarde toewys aan 'n kortstring-veranderlike, word die sny afgekap as dit die maksimum lengte vir die tipe oorskry. Wanneer ons kort stringe oorskakel na sommige Delphi se stringmanipulerende roetine, word hulle omgeskakel na en van lang tou.
String / Lang / Ansi
Delphi 2 het na die Pascal Long String- tipe van Object gebring. Lang string (in Delphi se hulp AnsiString) verteenwoordig 'n dinamiese toegewysde string waarvan die maksimum lengte slegs deur beskikbare geheue beperk word. Alle 32-bis Delphi-weergawes gebruik standaard stringe. Ek raai aan om lang snare te gebruik wanneer jy kan.
Var s: String; s: = 'Die string kan van enige grootte wees ...';
Die veranderlike kan van nul hou tot enige praktiese aantal karakters. Die tou groei of krimp as jy nuwe data toewys.
Ons kan enige stringveranderlike as 'n skikking karakters gebruik, die tweede karakter in s het die indeks 2. Die volgende kode
s : = "T";
wys T aan die tweede karakter os die s- veranderlike. Nou lyk die paar van die eerste karakters in s soos: TTe s str ....
Moenie mislei word nie, jy kan nie s gebruik nie  om die lengte van die tou te sien, s is nie ShortString nie.
Verwysings tel, kopie-op-skryf
Aangesien geheuetoewysing deur Delphi gedoen word, hoef ons nie te bekommer oor vullisversameling nie. By die gebruik van Lang (Ansi) Strings gebruik Delphi verwysingstelling. Op hierdie manier is snaarkopiëring eintlik vinniger vir lang snare as vir kort snare.
Var s1, s2: String; s1: = 'eerste string'; s2: = s1;
Wanneer ons string s1- veranderlike skep, en waarde daaraan toewys, ken Delphi genoeg geheue vir die tou toe. Wanneer ons s1 na s2 kopieer, kopieer Delphi nie die stringwaarde in die geheue nie, dit verhoog die verwysingstelling en verander die s2 om na dieselfde geheue plek as s1 te verwys .
Om kopiëring te minimaliseer as ons snare aan roetines slaag, gebruik Delphi kopie-op-skryf tegniek. Gestel ons moet die waarde van die s2 string veranderlike verander; Delphi kopieer die eerste string na 'n nuwe geheue plek, aangesien die verandering net s2, nie s1, moet beïnvloed nie en hulle wys albei na dieselfde geheue.
Breë snare word ook dinamies toegeken en bestuur, maar hulle gebruik nie verwysingstelling of die semantiese kopie-op-skryf nie. Wye snare bestaan ​​uit 16-bis Unicode karakters.
Oor Unicode karakters
Die ANSI-karakterset wat deur Windows gebruik word, is 'n enkel-byte karakterset.
Unicode slaan elke karakter in die karakter in 2 grepe in plaas van 1. Sommige nasionale tale gebruik ideografiese karakters, wat meer as die 256 karakters wat deur ANSI ondersteun word, benodig. Met 16-bis notasie kan ons 65.536 verskillende karakters verteenwoordig. Indeksering van multibyte snare is nie betroubaar nie, aangesien s [i] die ith byte voorstel (nie noodwendig die I-e karakter nie) in s .
As jy Wide karakters moet gebruik, moet jy 'n stringveranderlike verklaar wat van die WideString-tipe en jou karakterveranderlike van die WideChar-tipe is. As jy 'n wye snaar een karakter op 'n slag wil ondersoek, maak seker dat jy vir multibite karakters toets. Delphi ondersteun nie outomatiese tipe conversies betwwen Ansi en Wide snaar tipes.
var s: WideString; c: Widehar; s: = 'Delphi_ Guide'; s : = 'T'; // s = 'Delphi_TGuide';
'N Nul of nul-beëindigde string is 'n verskeidenheid karakters, geïndekseer deur 'n heelgetal wat vanaf nul begin. Aangesien die skikking geen lengte-aanwyser het nie, gebruik Delphi die ASCII 0 (NULL; # 0) karakter om die grens van die tou te merk.
Dit beteken dat daar in wese geen verskil bestaan ​​tussen 'n nul-beëindigde string en 'n skikking [0..NumberOfChars] van tipe Char, waar die einde van die tou met 0 gemerk is.
Ons gebruik nie-beëindigde snare in Delphi wanneer u Windows API-funksies roep. Object Pascal kan ons vermy om te draai met aanwysers na nul-gebaseerde skikkings wanneer die nie-beëindigde snare hanteer word deur die PChar-tipe te gebruik. Dink aan 'n PChar as 'n wyser na 'n nul-beëindigde string of die skikking wat een verteenwoordig.
Vir meer inligting oor wenke, kyk: Pointers in Delphi .
Byvoorbeeld, die funksie GetDriveType API bepaal of 'n skyfstation 'n verwyderbare, vaste, CD-ROM, RAM-skyf of netwerkdrive is. Die volgende prosedure lys al die dryf en hul soorte op 'n gebruikers rekenaar. Plaas een knoppie en een memo-komponent op 'n vorm en dien 'n OnClick-handler van 'n knoppie toe:
prosedure TForm1.Button1Click (Afsender: TObject); var Ry: Char; DriveLetter: String ; Begin vir Drive: = 'A' na 'Z' begin DriveLetter: = Ry + ': \'; geval GetDriveType (PChar (Drive + ': \')) van DRIVE_REMOVABLE: Memo1.Lines.Add (DriveLetter + 'Floppy Drive'); DRIVE_FIXED: Memo1.Lines.Add (DriveLetter + 'Fixed Drive'); DRIVE_REMOTE: Memo1.Lines.Add (DriveLetter + 'Network Drive'); DRIVE_CDROM: Memo1.Lines.Add (DriveLetter + 'CD-ROM Drive'); DRIVE_RAMDISK: Memo1.Lines.Add (DriveLetter + 'RAM Disk'); einde ; einde ; einde ;
Meng Delphi se snare
Ons kan vrylik al vier verskillende soorte snare meng, Delphi sal dit die beste maak om sin te maak van wat ons probeer doen. Die opdrag s: = p, waar s 'n stringveranderlike is en p is 'n PChar uitdrukking, kopieer 'n nul-beëindigde tou in 'n lang string.
Benewens vier snaardatatipes , het Delphi drie karakters: Char , AnsiChar , en WideChar . 'N Stringkonstante van lengte 1, soos' T ', kan 'n karakterwaarde aandui. Die generiese karaktertipe is Char, wat gelykstaande is aan AnsiChar. WideChar-waardes is 16-bis karakters volgens die Unicode-tekenset.