Цель: научиться использовать строковые переменные и функции для работы со строками.

В книге Угриновича: §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;