Цель: научиться использовать строковые переменные и функции для работы со строками.
В книге Угриновича: §4.3, §4.4. Практика: 4.2, 4.3, 4.4.
Создайте на форме следующие элементы:
· кнопка (TButton);
· текстовое поле (TEdit);
· текстовое поле (TEdit).
Добавьте событие OnClick для кнопки.
В событии мы опишем элементарный пример работы со строками.
ВАЖНО! Lazarus не всегда корректно обрабатывает русские символы, поэтому желательно вначале использовать английские символы!
Во-первых, вспомним, что переменные обозначаются в разделе var, а значит нам нужно будет объявлять там все нужные нам переменные. Но в нашем случае переменные пока не понадобятся. Нам достаточно будет свойств Text текстовых полей. Данное свойство имеет тип String. Т. е., если мы хотим работать с символами, то, например, можем напрямую работать с элементом Edit1.Text.
Рассмотрим примеры работы со строками.
Если нужно присвоить переменной строковое выражение (просто набор символов), то можем записать так:
s:=’…’;
s34:=’…’;
stpor:=’…’;
Edit1.Text:=’…’;
Edit46.Text:=’…’;
где в одинарных кавычках вместо многоточия можно вписать любую последовательность символов. Если ничего не вписывать, то переменная примет значение пустоты (т. е. ничего не будет содержать).
Строковые переменные можно складывать как числа в математике, но результатом будет просто объединение символов. Например:
Выражение | Результат |
S1:=’мол’+’око’; | молоко |
S2:=’мол’+’око’+’34’; | молоко34 |
Sporshe24:=’76’+’0’+’34’; | 76034 |
Sporshe24:=’76’+’34’+’0’; | 76340 |
Для работы со строковыми данными в pascal присутствуют несколько полезных функций. Например, функция copy(s, a,b) копирует из строки s символы в количестве b, начиная с позиции a. В строке, используемой функцией copy, первый символ имеет номер 1, а следующий 2 и т. д. Т. е., если запишем:
S44:=’Пыжик-мыжик’;
f:=’ё’+copy(s44,9,3);
То переменная f примет значение ‘ёжик’, так как функция copy(s44,9,3) скопирует из строки s44 подряд три символа (‘жик’), начиная с 9-го символа (‘ж’) строки s44, и это наше ‘жик’ добавится к символу ‘ё’.
Также, может пригодиться немаловажная функция определения количества символов в строке Length(st), где переменная st содержит строковое значение. Например, напишем код программы:
ss:=’яблоки на дереве’;
k:=length(‘поляна во саду’);
p3:=length(ss);
Переменная k примет значение 14, а переменная p3 значение 16.
Отмечу, что функция copy возвращает строковые данные, а поэтому результат имеет тип string. А функция length возвращает целочисленное значение и поэтому может иметь тип integer, longint, byte и т. д., т. е. любой целочисленный тип данных.
Рассмотрим пример программы, которая из трёх текстовых полей для ввода фамилии, имени и отчества, выведет результат в виде «», т. е. фамилия останется неизменной.
Для начала условимся, что на форме мы создали элементы, описанные ниже:
Элемент | Для чего нужен |
Edit1 – текстовое поле | в это поле вводим фамилию |
Edit2 – текстовое поле | в это поле вводим имя |
Edit3 – текстовое поле | в это поле вводим отчество |
Edit4 – текстовое поле | в это поле выводится результат |
Button1 – кнопка | для обработки нашего кода |
Теперь создадим событие (OnClick) ukorotit для кнопки Button1. В нём напишем строку:
Edit4.Text:= Edit1.Text+copy(Edit2.Text,1,1)+copy(Edit3.Text,1,1);
Т. е. при нажатии на кнопку у нас произойдёт копирование первых символов из полей Edit2 и Edit3 и объединение этого всего с содержимым поля Edit1. Например, если ввести следующее:
Вводимое поле | Что вводим |
Edit1 | Огурцов |
Edit2 | Валентин |
Edit3 | Петрович |
То в поле Edit4 получится:
ОгурцовВП
Естественно нужно добавить пробелы и точки в выводимом результате, т. е. нашу строку дополним следующим образом:
Edit4.Text:= Edit1.Text+’ ’+copy(Edit2.Text,1,1)+’.’+copy(Edit3.Text,1,1)+’.’;
И теперь получим результат:
Еще для примера допишем код для вывода количества символов в имени. Т. е. должно выводиться «, Символов в имени: 8».
Чтобы не писать огромную строку, воспользуемся переменными. Объявим в разделе var переменные s1 и s2:
var
s1,s2:string;
Теперь перепишем код для нашего события ukorotit:
s1:= Edit1.Text+’ ’+copy(Edit2.Text,1,1)+’.’+copy(Edit3.Text,1,1)+’.’;
s2:= IntToStr(length(Edit2.text));
Edit4.Text:= s1+’, Символов в имени: ’+s2;


