Както при всеки език за програмиране, в Delphi, променливите са заместители, използвани за съхраняване на стойности; те имат имена и типове данни. Типът данни на променлива определя как битовете, представляващи тези стойности, се съхраняват в паметта на компютъра.
Когато имаме променлива, която ще съдържа някакъв масив от знаци, можем да обявим, че е от типниз.
Delphi предлага здравословен асортимент от стринг оператори, функции и процедури. Преди да присвоим тип данни на String на променлива, трябва да разберем подробно четирите типа струни на Delphi.
Къса струна
Просто казано, Къса струна е преброен масив от (ANSII) символи, с до 255 знака в низ. Първият байт на този масив съхранява дължината на низа. Тъй като това беше основният тип струни в Delphi 1 (16-битов Delphi), единствената причина да се използва Short String е за обратно съвместимост.
За да създадем променлива от типа ShortString, използваме:
Var s: ShortString; s: = 'Програмиране на Delphi'; // S_Length: = Поръчка (s [0])); // което е същото като дължина (и)
Най- с променлива е променлива с кратък низ, способна да побере до 256 знака, паметта й е статично разпределени 256 байта. Тъй като това обикновено е разточително - малко вероятно късият ви низ ще се разпространи до максималната дължина - секунда подходът за използване на къси струни е използването на подтипове ShortString, чиято максимална дължина е от 0 до 255.
Var ssmall: String [50]; ssmall: = 'Кратък низ, до 50 знака';
Това създава променлива, наречена ssmall чиято максимална дължина е 50 знака.
Забележка: Когато присвояваме стойност на променлива Short String, низът се съкращава, ако надвишава максималната дължина за типа. Когато предаваме къси низове към някои рутини за манипулиране на низ на Delphi, те се преобразуват в и от дълъг низ.
String / Long / Ansi
Delphi 2 доведе до Object Pascal Дълга струна Тип. Дългият низ (в помощ на Delphi AnsiString) представлява динамично разпределен низ, чиято максимална дължина е ограничена само от наличната памет. Всички 32-битови версии на Delphi използват дълги низове по подразбиране. Препоръчвам да използвате дълги струни, когато можете.
Var s: Низ; s: = 'Низът може да бъде от всякакъв размер ...';
Най- с променлива може да съдържа от нула до всеки практически брой знаци. Низът расте или се свива, когато му присвоите нови данни.
Можем да използваме всяка низова променлива като масив от знаци, вторият символ в с има индекс 2. Следният код
и [2]: = "T";
правоприемници T към втория знак от с променлива. Сега няколко от първите герои в с изглежда като: TTe s str ....
Не се подвеждайте, не можете да използвате s [0], за да видите дължината на низа, с не е ShortString.
Преброяване на справки, копиране при запис
Тъй като разпределението на паметта се извършва от Delphi, не е нужно да се притесняваме за събирането на боклука. Когато работи с дълги (Ansi) струни, Delphi използва преброяване на еталони. По този начин копирането на струни всъщност е по-бързо за дълги низове, отколкото за къси низове.
Референтен брой, например:
Var s1, s2: Низ; s1: = 'първи низ'; s2: = s1;
Когато създаваме низ S1 променлива и й присвоява някаква стойност, Delphi разпределя достатъчно памет за низа. Когато копираме S1 да се s2, Delphi не копира стойността на низа в паметта, тя само увеличава броя на реферите и променя s2 за да посочите същото място в паметта като S1.
За да сведе до минимум копирането, когато предаваме низове в рутинни процедури, Delphi използва техниката за копиране при запис. Да предположим, че трябва да променим стойността на s2 низ променлива; Delphi копира първия низ в ново място в паметта, тъй като промяната трябва да засегне само s2, а не s1 и двамата сочат към едно и също място в паметта.
Широк низ
Широките низове също се разпределят динамично и се управляват, но те не използват преброяване на референтите или семантиката на копиране при запис. Широките низове се състоят от 16-битови символи Unicode.
За набор от символи на Unicode
Наборът от ANSI символи, използван от Windows, е еднобайтов набор от знаци. Unicode съхранява всеки символ в набор от знаци в 2 байта, вместо 1. Някои национални езици използват идеографски знаци, за които са необходими повече от 256 символа, поддържани от ANSI. С 16-битова нотация можем да представим 65 536 различни знака. Индексирането на многобайтови низове не е надеждно, тъй като и [Ь] представлява i-ти байт (не непременно i-тият символ) в с.
Ако трябва да използвате символи Wide, трябва да декларирате променлива на низ, която да бъде от типа WideString и вашата променлива от типа на WideChar. Ако искате да изследвате широк низ по един знак в даден момент, не забравяйте да тествате за многозначни символи. Delphi не поддържа автоматични преобразувания на типове между типове Ansi и Wide низ.
Var s: WideString; в: WideChar; s: = 'Ръководство за Delphi_'; s [8]: = 'T'; //s='Delphi_TGuide';
Нищо прекратено
Нулев или нулев завършен низ е масив от знаци, индексиран с цяло число, започващо от нула. Тъй като масивът няма индикатор за дължина, Delphi използва ASCII 0 (NULL; # 0) символ за маркиране на границата на низа.
Това означава, че по същество няма разлика между завършен с нула низ и масив [0..NumberOfChars] от тип Char, където краят на низа е маркиран с # 0.
Ние използваме нулево завършени низове в Delphi, когато извикваме функции на API на Windows. Object Pascal ни позволява да избягваме да объркваме arround с указатели към масиви, базирани на нула, когато боравим с нулево завършени низове, използвайки типа PChar. Помислете за PChar като показалец към нулев завършен низ или към масива, който представлява такъв. За повече информация относно указателите, проверете:Указатели в Delphi.
Например The GetDriveType API функцията определя дали дисковото устройство е подвижен, фиксиран, CD-ROM, RAM диск или мрежово устройство. Следващата процедура изброява всички дискове и техните типове на потребителски компютър. Поставете един бутон и един компонент на бележка върху формуляр и задайте манипулатор на OnClick на бутон:
процедура TForm1.Button1Click (Подател: TObject); Var Задвижване: Char; DriveLetter: String [4]; започвамза Задвижване: = 'A' да се "Z" правязапочвам DriveLetter: = Drive + ': \'; случай GetDriveType (PChar (Drive + ': \')) на DRIVE_REMOVABLE: Memo1.Lines. Добавяне (DriveLetter + 'Floppy Drive'); DRIVE_FIXED: Memo1.Lines. Добавяне (DriveLetter + 'Fixed Drive'); DRIVE_REMOTE: Memo1.Lines. Добавяне (DriveLetter + „Мрежово устройство“); DRIVE_CDROM: Memo1.Lines. Добавяне (DriveLetter + „CD-ROM устройство“); DRIVE_RAMDISK: Memo1.Lines. Добавяне (DriveLetter + 'RAM Disk'); край; край; край;
Смесване на струните на Delphi
Можем свободно да смесваме и четирите различни вида струни, Delphi ще даде най-доброто значение на това, което се опитваме да правим. Присвояването s: = p, където s е променлива на низ и p е PChar израз, копира завършен с нула низ в дълъг низ.
Видове знаци
В допълнение към четири типа низови данни, Delphi има три типа символи: овъглявам, AnsiChar, иWideChar. Низовата константа с дължина 1, например "T", може да обозначава стойност на знака. Типът на родовия герой е Char, което е еквивалентно на AnsiChar. Стойностите на WideChar са 16-битови символи, подредени според набора символи Unicode. Първите 256 символа Unicode съответстват на ANSI символите.