Ca în orice limbaj de programare, în Delphi, variabilele sunt marcatoare de plasă utilizate pentru stocarea valorilor; au nume și tipuri de date. Tipul de date al unei variabile determină modul în care biții reprezentând acele valori sunt stocate în memoria computerului.
Când avem o variabilă care va conține o serie de caractere, o putem declara ca fiind de tipŞir.
Delphi oferă un sortiment sănătos de operatori, funcții și proceduri. Înainte de a aloca un tip de date String unei variabile, trebuie să înțelegem în detaliu cele patru tipuri de șiruri ale lui Delphi.
Șir scurt
Pur și simplu pune, Șir scurt este un tablou numărat de (ANSII) caractere, cu până la 255 de caractere în șir. Primul octet al acestui tablou stochează lungimea șirului. Întrucât acesta a fost principalul tip de șir în Delphi 1 (Delphi cu 16 biți), singurul motiv pentru a utiliza Short String este pentru compatibilitatea înapoi.
Pentru a crea o variabilă de tip ShortString, utilizăm:
var s: ShortString; s: = 'Programare Delphi'; // S_Length: = Ord (s [0])); // care este aceeași cu Lungimea (lungile)
s variabilă este o variabilă cu șir scurt, capabilă să rețină până la 256 de caractere, memoria sa este o alocat 256 octeți static. Deoarece acest lucru este de obicei risipitor - este puțin probabil ca șirul scurt să se răspândească la lungimea maximă - secundă abordarea utilizării șirurilor scurte se folosește subtipuri de shortString, a căror lungime maximă este oriunde de la 0 la 255.
var ssmall: șir [50]; ssmall: = 'Șir scurt, până la 50 de caractere';
Aceasta creează o variabilă numită ssmall a cărei lungime maximă este de 50 de caractere.
Notă: Atunci când alocăm o valoare unei variabile cu șir scurt, șirul este trunchiat dacă depășește lungimea maximă a tipului. Când trecem șiruri scurte la unele rutine de manipulare a șirurilor Delphi, acestea sunt convertite în și din șiruri lungi.
Coarde / lungi / Ansi
Delphi 2 i-a adus obiectului Pascal Șir lung tip. Șir lung (în ajutorul lui Delphi AnsiString) reprezintă un șir alocat dinamic a cărui lungime maximă este limitată doar de memoria disponibilă. Toate versiunile Delphi pe 32 de biți folosesc șiruri lungi în mod implicit. Îți recomand să folosești șiruri lungi ori de câte ori poți.
var s: șir; s: = 'Șirul poate fi de orice dimensiune ...';
s variabila poate ține de la zero la orice număr practic de caractere. Șirul crește sau se micșorează pe măsură ce îi atribuiți date noi.
Putem folosi orice variabilă șir ca un tablou de caractere, al doilea caracter din s are indicele 2. Codul următor
s [2]: = 'T';
imputernicitii T la al doilea personaj os s variabil. Acum, câteva dintre primele personaje din s arată ca: TTe s str ....
Nu vă înșelați, nu puteți utiliza s [0] pentru a vedea lungimea șirului, s nu este ShortString.
Număr de referință, copiere pe scriere
Din moment ce alocarea memoriei este făcută de Delphi, nu trebuie să ne facem griji cu privire la colectarea gunoiului. Când lucrați cu Strings Long (Ansi), Delphi folosește numărarea de referințe. În acest fel, copierea șirurilor este de fapt mai rapidă pentru șiruri lungi decât pentru șiruri scurte.
Număr de referință, de exemplu:
var s1, s2: șir; s1: = 'primul șir'; s2: = s1;
Când creăm șir s1 variabilă și îi atribuie o anumită valoare, Delphi alocă suficientă memorie pentru șir. Când copiem s1 la s2, Delphi nu copiază șirul în memorie, ci doar crește numărul de referință și modifică s2 pentru a indica aceeași locație de memorie ca și s1.
Pentru a minimiza copierea atunci când trecem șiruri la rutine, Delphi folosește tehnica copy-on-write. Să presupunem că trebuie să schimbăm valoarea s2 variabila string; Delphi copiază primul șir într-o nouă locație de memorie, deoarece modificarea ar trebui să afecteze numai s2, nu s1 și ambele indică aceeași locație de memorie.
Șir larg
Șirurile largi sunt, de asemenea, alocate și gestionate dinamic, dar nu folosesc numărarea de referință sau semantica copie-pe-scriere. Șirurile largi constau din caractere Unicode pe 16 biți.
Despre seturile de caractere Unicode
Setul de caractere ANSI folosit de Windows este un set de caractere cu un singur octet. Unicode stochează fiecare caracter din setul de caractere în 2 octeți în loc de 1. Unele limbi naționale folosesc caractere ideografice, care necesită mai mult de cele 256 de caractere acceptate de ANSI. Cu o notare de 16 biți putem reprezenta 65.536 de caractere diferite. Din moment ce indexarea șirurilor multibyte nu este fiabilă si] reprezintă octețul ith (nu neapărat caracterul i) în s.
Dacă trebuie să utilizați caractere Wide, ar trebui să declarați o variabilă șir ca fiind de tip WideString și variabila dvs. de caractere de tip WideChar. Dacă doriți să examinați un caracter larg cu un șir simultan, asigurați-vă că testați caractere multibite. Delphi nu acceptă conversii automate de tipuri între tipurile de șiruri Ansi și Wide.
var s: WideString; c: WideChar; s: = 'Ghidul Delphi_; s [8]: = 'T'; //s='Delphi_TGuide';
Null a încetat
Un șir terminat nul sau zero este un tablou de caractere, indexat de un număr întreg care începe de la zero. Deoarece tabloul nu are indicator de lungime, Delphi folosește ASCII 0 (NULL; # 0) caracter pentru a marca limita șirului.
Aceasta înseamnă că nu există nicio diferență între un șir cu terminare nulă și un tablou [0..NumberOfChars] de tip Char, unde sfârșitul șirului este marcat cu # 0.
Folosim șiruri cu termene nule în Delphi atunci când apelăm la funcțiile API Windows. Obiectul Pascal ne permite să evităm încurcarea cu indicatoare către tablele bazate pe zero atunci când gestionăm șiruri terminate cu nul, folosind tipul PChar. Gândiți-vă la un PChar ca la indicatorul către un șir cu terminare nulă sau la tabloul care reprezintă unul. Pentru mai multe informații despre indicatoare, verificați:Poșteri în Delphi.
De exemplu, The GetDriveType Funcția API determină dacă o unitate de disc este o unitate CD-ROM, CD-ROM, disc RAM, sau de rețea detașabile. Următoarea procedură listează toate unitățile și tipurile lor de pe un computer utilizator. Plasați un buton și o componentă Memo pe un formular și atribuiți un instrument OnClick pentru un buton:
procedură TForm1.Button1Click (Expeditor: TObject); var Conducere: Char; DriveLetter: String [4]; începepentru Drive: = 'A' la 'Z' doîncepe DriveLetter: = Drive + ': \'; caz GetDriveType (PChar (Drive + ': \')) de DRIVE_REMOVABLE: Memo1.Lines. Adăugare (DriveLetter + 'Floppy Drive'); DRIVE_FIXED: Memo1.Lines. Adăugare (DriveLetter + 'Drive Fix'); DRIVE_REMOTE: Memo1.Lines. Adăugare (DriveLetter + 'Network Drive'); DRIVE_CDROM: Memo1.Lines. Adăugare (DriveLetter + 'CD-ROM Drive'); DRIVE_RAMDISK: Memo1.Lines. Adăugare (DriveLetter + 'RAM Disk'); Sfârșit; Sfârșit; Sfârșit;
Amestecarea corzilor lui Delphi
Putem amesteca liber toate cele patru tipuri de șiruri diferite, Delphi va da cel mai bine să înțeleagă ceea ce încercăm să facem. Sarcina s: = p, unde s este o variabilă șir și p este o expresie PChar, copiază un șir terminat nul într-o șir lungă.
Tipuri de caractere
Pe lângă patru tipuri de date șir, Delphi are trei tipuri de caractere: Carboniza, AnsiChar, șiWideChar. O constantă de șir de lungime 1, cum ar fi „T”, poate indica o valoare a caracterului. Tipul generic de caractere este Char, care este echivalent cu AnsiChar. Valorile WideChar sunt caractere de 16 biți ordonate în funcție de setul de caractere Unicode. Primele 256 de caractere Unicode corespund caracterelor ANSI.