Учебный центр "ANIT Texno Inform"
Опубликован: 25.06.2014 | Доступ: свободный | Студентов: 2595 / 850 | Длительность: 24:39:00
Специальности: Программист
Лекция 5:

Символы и строки

< Лекция 4 || Лекция 5: 12345 || Лекция 6 >

Символьные типы данных

В Lazarus имеется символьный тип Char. Переменная такого типа занимает ровно один байт памяти и может содержать любой ASCII - символ. Русскому языку с этим типом не повезло - поскольку символы кириллицы занимают по 2 байта, использовать этот тип с русскими буквами нельзя. Давайте откроем Lazarus с новым проектом. Если Lazarus у вас уже загружен, закройте старый проект командой Файл -> Закрыть, и создайте новый проект командой Проект -> Создать проект -> Приложение. Сразу же сохраните проект в папку 05-01 там, где вы храните все проекты лекций, проекту дайте имя MyStrings, и не забудьте назвать модуль главной формы Main, а саму форму fMain. Пусть это войдет у вас в привычку. Как всё это делается, вы должны знать по предыдущим лекциям. Не вздумайте давать своим проектам имена, используя ключевые (зарезервированные) слова. Например, нельзя давать проекту или модулю имя Strings, поскольку это слово зарезервировано, но MyStrings можно.

Прямо посреди формы установите кнопку TButton, дважды нажмите на нее, чтобы сгенерировать обработчик OnClick. В обработчике создадим раздел переменных var, укажем там одну переменную типа Char, и запрограммируем следующий код:

procedure TfMain.Button1Click(Sender: TObject);
var
  ch1: Char; //переменная символьного типа
begin
  ch1:= 'Z';
  ShowMessage(ch1);
end;
    

Как видим, здесь мы переменной ch1 присвоили значение - символ "Z". Запомните правило:

Символы и строки в Lazarus должны быть заключены в одинарные кавычки. Если требуется ввести в текст одинарную кавычку (например, в слове can't), то следует указать две таких одинарных кавычки, которые также заключены в одинарные кавычки.

Например:

Mystring:= 'I can' + '''' + 't';
    

Этот пример выполнять не нужно, он просто демонстрирует использование кавычек в строковых выражениях, и возможность в выражении соединять несколько строк в одну с помощью знака "+". Однако вернемся к нашему проекту. После того, как мы присвоили символьной переменной большую английскую букву "Z", мы вывели содержимое переменной с помощью строки

ShowMessage(ch1);
    

Сохраните проект, скомпилируйте его и выполните. Когда программа с кнопкой появится на экране, нажмите нашу единственную кнопку - выйдет сообщение с буквой "Z":

Вывод символа

Рис. 5.2. Вывод символа

Таким образом, мы можем работать с отдельными символами. Однако если вы исправите код, и вместо буквы "Z" в строке

ch1:= 'Z';
    

укажете русский символ, то при попытке скомпилировать и запустить проект выйдет ошибка "Error: Incompatible types: got "Constant String" expected "Char"" - несовместимость типов String (строка) и Char (символ). Поскольку русские буквы занимают по два байта, Lazarus их считает строкой символов. Однако это не значит, что мы совсем не имеем возможности работать с отдельными символами кириллицы.

Ранее упоминалось, что в Lazarus используется формат UTF8. Для поддержки этого формата были разработаны расширенные типы данных, в том числе и символьные. Так, имеется тип TUTF8Char, который позволяет работать с любыми отдельными символами, в том числе и русскими. Имеет смысл всегда использовать его вместо стандартного Char. Но для этого нам нужно будет подключить модуль LCLType, где этот тип описан.

Перейдите в редактор кода и пролистайте код модуля вверх. Там вы увидите раздел uses (англ. use - использовать), где перечислены подключенные модули. Нам нужно поставить после последнего модуля запятую и добавить наш подключаемый модуль:

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  LCLType;
    

Если строка получается длинной, то после запятой можно переносить текст на другую строку.

Теперь вернемся к обработчику нажатия на кнопку и переделаем его:

procedure TfMain.Button1Click(Sender: TObject);
var
  ch1: Char;
  ch2: TUTF8Char;
begin
  ch1:= 'Z';
  ch2:= 'Я';
  ShowMessage(ch1);
  ShowMessage(ch2);
end;
    

Теперь всё сработает как надо, и русский символ "Я" выйдет так же, как английский "Z".

Однако, это еще не всё. Символы можно вводить, указывая их номер в таблице символов. Для этого перед номером нужно указать символ "#", например:

ch1:= #90;
    

Под номером 90 находится буква Z в таблице символов, так что результат не изменится. Также в строковых выражениях можно указывать и специальные символы. Например, символ под номером 13 - это символ перехода на другую строку. Давайте снова немного изменим код:

procedure TfMain.Button1Click(Sender: TObject);
var
  ch1: Char;
  ch2: TUTF8Char;
begin
  ch1:= #90;  //буква Z
  ch2:= 'Я';
  ShowMessage(ch1 + #13 + ch2); //вывод двухстрочного сообщения
end;
    

Сохраните проект, скомпилируйте и запустите на выполнение. Теперь содержимое двух символьных переменных выходит в одном сообщении, но каждое на своей строке.

< Лекция 4 || Лекция 5: 12345 || Лекция 6 >
Инга Готфрид
Инга Готфрид
Александр Скрябнев
Александр Скрябнев

Через WMI, или используя утилиту wmic? А может есть еще какие более простые пути...