Работа с BDE в Delphi 11 |
Символьные типы данных
Символ
Символ – это один знак. Любой – буква, цифра, арифметический знак или пробел, знак препинания или подчеркивания... А также специальные символы – переход на новую строку, BackSpace, знак доллара или процент. Тип "символ" в Delphi обозначается Char:
var c : Char; begin c := 'В'; ShowMessage('Вы ввели ' + c); c := #13; ShowMessage('Переход на новую' + c + 'строку'); ...
Мы уже говорили, что символы берутся из таблицы символов ANSI или UNICODE. Большинство символов используются, некоторые символы являются служебными. Обратите внимание, что большая буква "А" и маленькая "а" - это разные символы! Также разными символами являются латинская "с" и русская "с", хотя они похожи, как две капли воды.
Нулевой символ не используется, он зарезервирован как полный нуль. Программисты нашли достойное применение этому символу, используя его в событиях ввода текста, когда требуется запретить пользователю ввод каких-либо символов. Служебные символы мы не можем увидеть в текстовом поле. Служебные символы, это <Esc>, <Enter>, <Tab> и другие. Каждый символ обрабатывается компьютером как число от 0 до 255, таким образом, слово "ПРИВЕТ" в памяти машины будет выглядеть как набор цифр: "207 208 200 194 197 210".
Функции работы с символами
В практике часто приходится обрабатывать отдельные символы. Переменным символьного типа Char можно присваивать значения таким образом:
var c,b : Char; begin c := 'a'; b := c;
Поскольку для компьютера символ – число, то символьные данные можно сравнивать между собой. При этом большим будет тот символ, код которого в таблице символов больше. Например, код 'я' будет больше, чем код 'а':
if b > c then ShowMessage('Истина!') else ShowMessage('Ложь!');
При работе с символьными переменными часто используют функции Chr() и Ord(). Функция Chr() принимает в качестве параметра число и возвращает символ, который соответствует этому числу в таблице ANSI:
function Chr ( X: Byte ): Char;
Функция Ord() совершает прямо противоположное действие, она принимает в качестве параметра символ, и возвращает число, под которым этот символ хранится в таблице ANSI:
function Ord ( C: Char ): Byte;
Символьные переменные можно использовать с этими функциями:
a := Chr(200); i := Ord(a); i := Ord('f');
В первой строке в переменную a мы записали символ "И", которому в таблице символов соответствует номер 200. Во вторую, целую переменную, мы записали число 200, так как символ с этим номером был записан в переменную a, которую мы передали в качестве параметра. Наконец, в третьей строке мы в целую переменную записали число 102, этот номер соответствует символу "f".
Строка
Строка – это набор символов. Строку можно представить в виде статичного или динамичного массива символьных данных. Типы строк мы уже разбирали в "Управляющая конструкция if, цикл for" : AnsiString – строка из ANSI – символов, и WideString – строка из UNICODE – символов.
Тип String не является отдельным типом, по умолчанию он равен AnsiString. Однако его можно перенастроить и на WideString, хотя в этом нет необходимости. Поэтому смело указывайте строковые переменные, как String:
var s : String; begin s := 'Это многострочная' + #13 + 'строка'; ShowMessage(s);
Как видно из примера, строку можно составлять из нескольких подстрок, и даже добавлять в нее отдельные символы. В примере мы добавили символ под номером 13, это символ перехода на новую строку. В результате выполнения этого кода процедура ShowMessage() выведет на экран сообщение, разбитое на две строки:
Это многострочная строка
ShortString – короткая строка из ANSI – символов. Может содержать от 0 до 255 символов. Используется нечасто. Собственно, вы можете объявить тип String с заранее указанным размером:
var s : String[100];
Как видите, строка объявляется с числовым индексом, почти как массив. Собственно, строка символов и есть массив символьных данных, и обращаться с ней можно так же. Индексация символов в строке начинается с единицы, то есть, индексу 1 соответствует 1-й символ строки.
var stroka : String; begin stroka := 'Привет'; stroka[5] := 'а'; //изменили 5-й символ строки ShowMessage(stroka); //результат: строка "Приват"