Delphi'de Dize Türleri

Tüm programlama dillerinde olduğu gibi, Delphideğişkenler değerleri depolamak için kullanılan yer tutuculardır; adları ve veri türleri vardır. Bir değişkenin veri türü, bu değerleri temsil eden bitlerin bilgisayarın belleğinde nasıl saklanacağını belirler.

Bazı karakter dizileri içerecek bir değişkenimiz olduğunda, bunu tür olarak bildirebilirizsicim.
Delphi, string operatörleri, fonksiyonları ve prosedürleri için sağlıklı bir ürün yelpazesi sunar. Bir değişkene String veri tipi atamadan önce Delphi'nin dört string tipini iyice anlamamız gerekir.

Kısa Dizi

Basit ifadeyle, Kısa Dizi dizede 255 karaktere kadar sayılan (ANSII) karakter dizisidir. Bu dizinin ilk baytı dizenin uzunluğunu saklar. Bu, Delphi 1'deki (16 bit Delphi) ana dize türü olduğundan, Kısa Dize kullanmanın tek nedeni geriye dönük uyumluluk içindir.
Bir ShortString türü değişkeni oluşturmak için şunu kullanırız:

var s: ShortString; s: = 'Delphi Programlama'; // S_Length: = Ord (s [0])); // Uzunluk (lar) ile aynı


s değişken 256 karaktere kadar tutabilen bir Kısa dize değişkendir, belleği statik olarak ayrılmış 256 bayttır. Bu genellikle savurgan olduğu için - kısa dizenizin maksimum uzunluğa yayılması olası değildir - saniye Kısa Dizeleri kullanma yaklaşımı, maksimum uzunluğu 0 ile 0 arasında olan ShortString alt türlerini kullanmaktır. 255.

instagram viewer

var ssmall: String [50]; ssmall: = 'Kısa karakter, 50 karaktere kadar';

Bu, şu şekilde adlandırılır: ssmall maksimum uzunluğu 50 karakterdir.

Not: Kısa String değişkenine bir değer atadığımızda, dize, tür için maksimum uzunluğu aşarsa kesilir. Bazı Delphi'nin dize işleme rutinine kısa dizeler geçirdiğimizde, bunlar uzun dizeye ve dizeden dönüştürülür.

Dize / Uzun / Ansi

Delphi 2 Object Pascal'a getirildi Uzun String yazın. Uzun dize (Delphi'nin yardımında AnsiString), maksimum uzunluğu yalnızca kullanılabilir bellekle sınırlı olan dinamik olarak ayrılmış bir dizeyi temsil eder. Tüm 32 bit Delphi sürümleri varsayılan olarak uzun dizeler kullanır. Mümkün olduğunca uzun dizeler kullanmanızı öneririm.

var s: String; s: = 's dizesi herhangi bir boyutta olabilir ...';

s değişken sıfırdan herhangi bir sayıda pratik karaktere kadar tutabilir. Siz ona yeni veriler atarken dize büyür veya küçülür.

Herhangi bir dize değişkenini karakter dizisi olarak kullanabiliriz. s 2 dizinine sahiptir. Aşağıdaki kod

kullanıcının [2]: = 'T';

atar T ikinci karakter os s değişken. Şimdi ilk karakterlerden birkaçı s gibi görünmek: TTe s str ....
Yanıltıcı olmayın, dizenin uzunluğunu görmek için s [0] kullanamazsınız, s ShortString değil.

Referans sayma, yazma üzerine kopyalama

Bellek ayırma işlemi Delphi tarafından yapıldığından, çöp toplama konusunda endişelenmemiz gerekmiyor. Uzun (Ansi) Dizeleri ile çalışırken Delphi referans sayımını kullanır. Bu şekilde dize kopyalama, uzun dizeler için kısa dizelerden daha hızlıdır.
Referans sayımı, örneğin:

var s1, s2: Dize; s1: = 'ilk dize'; s2: = s1;

Dize oluşturduğumuzda s1 değişkenine bir değer atadığında, Delphi dize için yeterli bellek ayırır. Kopyaladığımızda s1 için s2, Delphi bellekte dize değerini kopyalamaz, sadece referans sayısını artırır ve s2 ile aynı bellek konumuna işaret etmek için s1.

Dizeleri rutinlere geçirdiğimizde kopyalamayı en aza indirmek için Delphi yazma üzerine kopyalama tekniğini kullanır. Varsayalım ki s2 dize değişkeni; Delphi ilk dizeyi yeni bir bellek konumuna kopyalar, çünkü değişiklik s1'i değil yalnızca s2'yi etkilemelidir ve her ikisi de aynı bellek konumunu işaret etmektedir.

Geniş Dize

Geniş dizeler de dinamik olarak ayrılır ve yönetilir, ancak referans sayımı veya yazma üzerine kopyalama semantiği kullanmazlar. Geniş dizeler 16 bitlik Unicode karakterlerden oluşur.

Unicode karakter setleri hakkında

Windows tarafından kullanılan ANSI karakter kümesi tek baytlık bir karakter kümesidir. Unicode, her karakteri 1 yerine 2 baytlık karakter kümesinde saklar. Bazı ulusal diller, ANSI tarafından desteklenen 256'dan fazla karakter gerektiren ideografik karakterler kullanır. 16 bit gösterimde 65.536 farklı karakteri temsil edebiliriz. Çok baytlı dizelerin indekslenmesi güvenilir değildir, çünkü si] içindeki i biti temsil eder (ille de i-inci karakteri değil) s.

Geniş karakterler kullanmanız gerekiyorsa, bir dize değişkenini WideString türünde ve karakter değişkeninizi WideChar türünde olduğunu bildirmeniz gerekir. Geniş bir dizeyi bir kerede bir karakter incelemek istiyorsanız, çok baytlı karakterleri test ettiğinizden emin olun. Delphi, Ansi ve Geniş dize türleri arasında otomatik tür dönüşümlerini desteklemez.

var s: Geniş Açı; c: WideChar; s: = 'Delphi_ Kılavuzu'; s [8]: = 'T'; //s='Delphi_TGuide';

Boş sonlandırıldı

Boş veya sıfır sonlandırılmış dize, sıfırdan başlayarak bir tamsayı ile dizinlenmiş bir karakter dizisidir. Dizinin uzunluk göstergesi olmadığından Delphi, ASCII 0 (NULL; # 0) dizenin sınırını işaretlemek için karakter.
Bu, boş değerli sonlandırılmış bir dize ile Char türünde bir dizi [0..NumberOfChars] arasında fark olmadığı anlamına gelir; burada dizenin sonu # 0 ile işaretlenir.

Windows API işlevlerini çağırırken Delphi'de null sonlandırılmış dizeler kullanıyoruz. Nesne Pascal, PChar türünü kullanarak boş sonlandırılmış dizeleri işlerken işaretçilerle sıfır tabanlı dizilere uğramaktan kaçınmamızı sağlar. PChar'ı null sonlandırılmış bir dizeye veya bir diziyi temsil eden diziye işaretçi olarak düşünün. İşaretçiler hakkında daha fazla bilgi için şunları kontrol edin:Delphi içinde işaretçiler.

Örneğin, GetDriveType API işlevi, bir disk sürücüsünün çıkarılabilir, sabit, CD-ROM, RAM disk veya ağ sürücüsü olup olmadığını belirler. Aşağıdaki yordam, bir kullanıcı bilgisayarındaki tüm sürücüleri ve türlerini listeler. Bir Düğme ve bir Not bileşeni forma yerleştirin ve bir Button öğesinin OnClick işleyicisini atayın:

prosedür TForm1.Button1Click (Gönderen: TObject); var
Sürücü: Char; DriveLetter: String [4]; başlaiçin Sürücü: = 'A' için 'Z' yapmakbaşla
DriveLetter: = Drive + ': \'; durum GetDriveType (PChar (Drive + ': \')) nın-nin
DRIVE_REMOVABLE: Memo1.Lines. Ekle (DriveLetter + 'Disket Sürücü'); DRIVE_FIXED: Memo1.Lines. Ekle (DriveLetter + 'Sabit Sürücü'); DRIVE_REMOTE: Not1 Hatları. Ekle (DriveLetter + 'Ağ Sürücüsü'); DRIVE_CDROM: Memo1.Lines. Ekle (DriveLetter + 'CD-ROM Sürücüsü'); DRIVE_RAMDISK: Memo1.Lines. Ekle (DriveLetter + 'RAM Disk'); son; son; son;

Delphi dizelerini karıştırma

Dört farklı dizeyi serbestçe karıştırabiliriz, Delphi ne yapmaya çalıştığımızın anlamını vermek için en iyisini verecektir. S: = p ataması, burada s bir dize değişkeni ve p bir PChar ifadesidir, boş sonlandırılmış bir dizeyi uzun bir dizeye kopyalar.

Karakter türleri

Dört dize veri türüne ek olarak, Delphi'nin üç karakter türü vardır: kömür, ANSIChar, vewidechar. 'T' gibi uzunluk 1 dize sabiti bir karakter değerini gösterebilir. Genel karakter türü, AnsiChar'a eşdeğer olan Char'dır. WideChar değerleri, Unicode karakter kümesine göre sıralı 16 bit karakterlerdir. İlk 256 Unicode karakter ANSI karakterlerine karşılık gelir.

instagram story viewer