Jenis String dalam Delphi

Seperti bahasa pemrograman apa pun, di Delphi, variabel adalah placeholder yang digunakan untuk menyimpan nilai; mereka memiliki nama dan tipe data. Tipe data dari suatu variabel menentukan bagaimana bit-bit yang mewakili nilai-nilai tersebut disimpan dalam memori komputer.

Ketika kita memiliki variabel yang akan berisi beberapa array karakter, kita dapat mendeklarasikannya sebagai tipeTali.
Delphi menyediakan beragam operator, fungsi, dan prosedur string yang sehat. Sebelum menetapkan tipe data String ke suatu variabel, kita perlu memahami empat tipe string Delphi.

String pendek

Sederhananya, String pendek adalah array terhitung karakter (ANSII), dengan hingga 255 karakter dalam string. Byte pertama array ini menyimpan panjang string. Karena ini adalah tipe string utama dalam Delphi 1 (16 bit Delphi), satu-satunya alasan untuk menggunakan String Pendek adalah untuk kompatibilitas ke belakang.
Untuk membuat variabel tipe ShortString kami menggunakan:

var s: ShortString; s: = 'Pemrograman Delphi'; // S_Length: = Ord (s [0])); // yang sama dengan Panjang
instagram viewer


Itu s variabel adalah variabel string pendek yang mampu menampung hingga 256 karakter, memorinya adalah 256 byte yang dialokasikan secara statis. Karena ini biasanya boros - tidak mungkin string pendek Anda akan menyebar ke panjang maksimum - detik pendekatan untuk menggunakan Short Strings menggunakan subtipe ShortString, yang panjang maksimumnya adalah dari 0 hingga 255.

var ssmall: String [50]; ssmall: = 'String pendek, hingga 50 karakter';

Ini menciptakan variabel yang disebut ssmall yang panjang maksimalnya adalah 50 karakter.

Catatan: Saat kami menetapkan nilai ke variabel String Pendek, string akan terpotong jika melebihi panjang maksimum untuk tipe tersebut. Ketika kita melewatkan string pendek ke beberapa rutinitas manipulasi string Delphi, mereka dikonversi ke dan dari string panjang.

String / Long / Ansi

Delphi 2 dibawa ke Object Pascal Benang panjang Tipe. Tali panjang (dalam bantuan Delphi AnsiString) mewakili string yang dialokasikan secara dinamis yang panjang maksimumnya dibatasi hanya oleh memori yang tersedia. Semua versi Delphi 32-bit menggunakan string panjang secara default. Saya sarankan menggunakan string panjang kapan pun Anda bisa.

var s: String; s: = 'String s dapat dari berbagai ukuran ...';

Itu s variabel dapat menampung dari nol hingga jumlah karakter praktis. String tumbuh atau menyusut saat Anda menetapkan data baru.

Kita bisa menggunakan variabel string apa pun sebagai array karakter, karakter kedua di s memiliki indeks 2. Kode berikut

s [2]: = 'T';

menugaskan T ke karakter kedua os the s variabel. Sekarang beberapa karakter pertama di s terlihat seperti: TTe ....
Jangan menyesatkan, Anda tidak bisa menggunakan s [0] untuk melihat panjang string, s bukan ShortString.

Penghitungan referensi, copy-on-write

Karena alokasi memori dilakukan oleh Delphi, kita tidak perlu khawatir tentang pengumpulan sampah. Saat bekerja dengan Long (Ansi) Strings Delphi menggunakan penghitungan referensi. Dengan cara ini penyalinan string sebenarnya lebih cepat untuk string panjang daripada string pendek.
Penghitungan referensi, dengan contoh:

var s1, s2: String; s1: = 'string pertama'; s2: = s1;

Saat kita membuat string s1 variabel, dan menetapkan beberapa nilai untuk itu, Delphi mengalokasikan cukup memori untuk string. Ketika kita menyalin s1 untuk s2, Delphi tidak menyalin nilai string dalam memori, hanya meningkatkan jumlah referensi dan mengubah s2 untuk menunjuk ke lokasi memori yang sama dengan s1.

Untuk meminimalkan penyalinan ketika kami meneruskan string ke rutinitas, Delphi menggunakan teknik copy-on-write. Misalkan kita harus mengubah nilai s2 variabel string; Delphi menyalin string pertama ke lokasi memori baru, karena perubahan seharusnya hanya mempengaruhi s2, bukan s1, dan keduanya menunjuk ke lokasi memori yang sama.

String Lebar

String lebar juga dialokasikan dan dikelola secara dinamis, tetapi mereka tidak menggunakan penghitungan referensi atau semantik copy-on-write. String lebar terdiri dari karakter Unicode 16-bit.

Tentang set karakter Unicode

Set karakter ANSI yang digunakan oleh Windows adalah set karakter byte tunggal. Unicode menyimpan setiap karakter dalam karakter yang diatur dalam 2 byte, bukan 1. Beberapa bahasa nasional menggunakan karakter ideografis, yang membutuhkan lebih dari 256 karakter yang didukung oleh ANSI. Dengan notasi 16-bit kami dapat mewakili 65.536 karakter yang berbeda. Karena itu pengindeksan string multibyte tidak dapat diandalkan s [i] mewakili byte ke-i (tidak harus karakter ke-i) di s.

Jika Anda harus menggunakan karakter Lebar, Anda harus mendeklarasikan variabel string menjadi tipe WideString dan variabel karakter Anda dari tipe WideChar. Jika Anda ingin memeriksa karakter lebar string satu per satu, pastikan untuk menguji karakter multibite. Delphi tidak mendukung konversi tipe otomatis antara tipe Ansi dan Wide string.

var s: WideString; c: WideChar; s: = 'Panduan Delphi_; s [8]: = 'T'; //s='Delphi_TGuide';

Null dihentikan

String yang diakhiri dengan nol atau nol adalah array karakter, diindeks oleh integer mulai dari nol. Karena array tidak memiliki indikator panjang, Delphi menggunakan ASCII 0 (NULL; # 0) karakter untuk menandai batas string.
Ini berarti pada dasarnya tidak ada perbedaan antara string yang diakhiri dengan nol dan array [0..NumberOfChars] dari tipe Char, di mana ujung string ditandai oleh # 0.

Kami menggunakan string yang diakhiri null di Delphi saat memanggil fungsi Windows API. Object Pascal memungkinkan kita menghindari bermain-main dengan pointer ke array berbasis nol saat menangani string null-terminated dengan menggunakan tipe PChar. Anggap PChar sebagai penunjuk ke string yang diakhiri null atau ke array yang mewakili satu. Untuk info lebih lanjut tentang petunjuk, periksa:Pointer dalam Delphi.

Misalnya, The GetDriveType Fungsi API menentukan apakah drive disk dapat dilepas, diperbaiki, CD-ROM, RAM disk, atau drive jaringan. Prosedur berikut mencantumkan semua drive dan tipenya pada komputer pengguna. Tempatkan satu Tombol dan satu komponen Memo pada formulir dan tetapkan handler OnClick dari suatu Tombol:

prosedur TForm1.Button1Click (Pengirim: TObject); var
Berkendara: Char; DriveLetter: String [4]; mulaiuntuk Berkendara: = 'A' untuk 'Z' melakukanmulai
DriveLetter: = Drive + ': \'; kasus GetDriveType (PChar (Drive + ': \')) dari
DRIVE_REMOVABLE: Memo1.Lines. Tambah (DriveLetter + 'Floppy Drive'); DRIVE_FIXED: Memo1.Lines. Tambah (DriveLetter + 'Drive Tetap'); DRIVE_REMOTE: Memo1.Lines. Tambah (DriveLetter + 'Drive Jaringan'); DRIVE_CDROM: Memo1.Lines. Tambah (DriveLetter + 'Drive CD-ROM'); DRIVE_RAMDISK: Memo1.Lines. Tambah (DriveLetter + 'RAM Disk'); akhir; akhir; akhir;

Mencampur string Delphi

Kita dapat dengan bebas mencampur keempat jenis string yang berbeda, Delphi akan memberikan yang terbaik untuk memahami apa yang sedang kita coba lakukan. Tugas s: = p, di mana s adalah variabel string dan p adalah ekspresi PChar, menyalin string yang diakhiri dengan null ke string yang panjang.

Jenis karakter

Selain empat tipe data string, Delphi memiliki tiga tipe karakter: Arang, AnsiChar, danWideChar. Konstanta string dengan panjang 1, seperti 'T', dapat menunjukkan nilai karakter. Tipe karakter umum adalah Char, yang setara dengan AnsiChar. Nilai WideChar adalah karakter 16-bit yang dipesan sesuai dengan rangkaian karakter Unicode. 256 karakter Unicode pertama sesuai dengan karakter ANSI.

instagram story viewer