Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование в Delphi (повторение).doc
Скачиваний:
7
Добавлен:
04.05.2019
Размер:
2.74 Mб
Скачать

5.7. Операции со строками

В языке Delphi есть несколько полезных при работе со строками функций и процедур. Некоторые из них уже описывались ранее в обработчике событий KeyPress.

5.7.1. Стандартные функции и процедуры работы со строками

Функция length

Функция length возвращает длину строки. У этой функции один пара­метр – выражение строкового типа. Значением функции length (целое число) является количество символов, из которых состоит строка.

Например, в результате выполнения инструкций

n:=length('Иванов');

m:=length (' Невский проспект ');

значение переменных n и m будет равно 6 и 20.

Процедура delete

Процедура delete позволяет удалить часть строки. В общем виде обращение к этой процедуре выглядит так:

delete(Строка, р, п)

где:

Строка – переменная или константа строкового типа;

pномер символа, с которого начинается удаляемая подстрока;

п – длина удаляемой подстроки.

Например, в результате выполнения инструкций

s: ='Город Санкт-Петербург';

delete(s,7,6) ;

значением переменной s будет строка 'Город Петербург'.

Функция pos

Функция pos позволяет определить положение подстроки в строке. В об­щем виде обращение к функции выглядит так:

pos (Подстрока, Строка) ;

где подстрока – строковая константа или переменная, которую надо найти в строковой константе или переменной Строка.

Например, в результате выполнения инструкции

p:= pos('Пе','Санкт-Петербург');

значение переменной р будет равно 7. Если в строке нет искомой подстро­ки, то значение функции pos будет равно нулю.

Ниже приведена инструкция while, в результате выполнения которой уда­ляются начальные пробелы из строки st.

while(pos(' ',st) = 1) and(length(st) > 0) do

delete (st,1,1);

Пробелы удаляет инструкция delete (st,l,l), которая выполняется в цикле до тех пор, пока первым символом строки является пробел. В этом случае значение

pos(' ',st) равно единице. Необходимость проверки условия length (st) > 0 объясняется возможностью того, что введенная строка со­стоит только из пробелов.

Функция сору

Функция сору позволяет выделить фрагмент строки. В общем виде обраще­ние к функции сору выглядит так:

сору(Строка ,р,n)

где:

Строка – выражение строкового типа, содержащее строку, фрагмент кото­рой надо получить;

P– номер первого символа, с которого начинается выделяемая под­строка;

n – длина выделяемой подстроки.

Например, в результате выполнения инструкций

st:= 'Инженер Иванов';

fam:=copy(st, 9,6);

значением переменной fam будет строка 'Иванов'.

5.7.2. Использование операций со строками

В качестве примеров использования операций со строками можно привести примеры функций проверки допустимости ввода символов.

Функция isint проверяет, является ли символ, соответствующий клавише нажатой во время ввода целого числа в поле редактирования, допустимым. Предполагается, что допустимыми являются цифры, клавиши <Enter> и <Backspace>.

// проверяет, является ли символ допустимым

// во время ввода целого числа

function IsInt(ch : char) : Boolean;

begin

if (ch >= '0') and (ch <= '9') // цифры

or (ch = #13) // клавиша <Enter>

or (ch = #8) // клавиша <Back Space>

then

IsInt := True; // символ верный

Else IsInt:= False; // недопустимый символ

end;

Функция isFloat решает аналогичную задачу, но для дробно­го числа. У функции isFloat два параметра: код нажатой клавиши и строка символов, которая уже введена в поле редактирования.

// проверяет, является ли символ допустимым

// во время ввода дробного числа

Function IsFloat (ch:char; st: string): boolean ;

begin

if (ch>='0') and (ch<='9')// цифры

or (ch=#13) // клавиша <Enter>

or (ch = #8) // клавиша <Back Space>

then

begin

IsFloat:=true;// символ верный

exit; //выход из функции

end;

case ch of

'-': if Length(st) = 0 then IsFloat:= True

else IsFloat:= False;

',': if (Pos(',',st)=0)and (st[Length(st)]>='0')and (st[Length(st)]<='9')

then IsFloat := True;//разделитель можно ввести только

//после цифры и если он ещё не введён

else IsFloat:= False;//остальные символы запрещены

end;

end;

Обращение к функции

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

if KEY=Char(VK_Return) then

Edit2.SetFocus

else if not ISFLoat(Key,Edit1.Text) then Key:=Chr(0);

end;