Процедуры и функции для работы со строками в Delphi

Строки очень часто используются в программах - хотя бы для вывода раз­личных сообщений пользователю, чтобы он не заблудился в интерфейсе. Ну, для таких простых случаев вполне достаточно тех сведений, которые вы получили на уроке, посвящённом строкам. Если же у вас более серьёз­ные намерения и вы хотите манипулировать строками по своему желанию (например, вы пишете какую-нибудь словесную игру вроде Балды или Ло­гогрифов), то в Delphi найдётся всё нужное и для таких любителей словес­ности и жонглирования приставками и суффиксами.

Для определённости в примерах будем считать, что

s1= 'СМОРОДИНА', а s2='ПАРАШЮТ'.

Когда мы изучали простые операции со строками, то рассматривали кон­катенацию строк с помощью оператора +. Но объединить две строки можно и функцией

function Concat(S1: string; S2: string): string;

которая возвращает «сумму» двух строк:

concat(s1,s2)  ^    СМОРОДИНАПАРАШЮТ

Для сравнения строк вместо операторов отношения можно использовать следующие функции.

 

function CompareStr(const S1: string;
const S2: string): Integer;
function CompareText(const S1: string;
const S2: string): Integer;

Обе функции сравнивают строки s1 и s2. Первая - с учётом регистра букв (прописные/строчные), вторая - без учёта.

Эти функции возвращают значение

0, если строки равны;

< 0, если si < s2 > 0, если si > s2.

Их нельзя применять к русским словам, поэтому лучше пользоваться функциями:

 


function AnsiCompareStr(const S1:   string;     const S2:  string):  Inte­ger;
function AnsiCompareText(const S1:  string; const S2:  string):  In­
teger;

которые одинаково хорошо работают и с латинскими, и с русскими буква­ми.

Теперь перейдём к процедурам и функциям, которые выполняют со сло­вами более сложные действия.

Довольно часто нужно преобразовать все буквы слова либо к верхнему, либо к нижнему регистру. Если слова состоят только из латинских букв, то можно использовать функции:

function LowerCase(const S: string): string;
function Uppercase(const S: string): string;

Первая переводит слова в нижний регистр (строчные буквы), вторая - в верхний (прописные буквы). Для русских (и для латинскихбукв годятся функции:

function AnsiLowerCase(const S: string): string;
function AnsiUpperCase(const S: string): string;

Например:

Функция AnsiLowerCase (S1) вернёт строку «смородина».

Функция AnsiUpperCase (’смородина’) вернёт строку «СМОРОДИНА».

Процедуры вывода сообщений на экран (обычно в метку или список) тре­буют в качестве параметра строку, а что делать, если нужно предъявить пользователю число? - Преобразовать число в строку! Это можно сде­лать и самостоятельно, но гораздо удобнее воспользоваться встроенными функциями Delphi.

Чаще других в программах применяют функции для преобразования це­лых чисел в строку:

function IntToStr(Value: Integer): string; function IntToStr(Value: Int64): string;

 

Например, IntToStr (1234) вернёт строку «1234».

Для действительных чисел тоже имеется подобная функция

Если вы хотите узнать, как десятичное число записывается в 16-ричной системе счисления, примените к нему функции:

function IntToHex(Value: Integer; Digits: Integer): string; function IntToHex(Value: Int64; Digits: Integer): string;

 

Например, IntToHex (12 34,    8)   вернёт     строку    «000004D2», а IntToHex (2009, 4) - строку «07D9».

 

 

Второй параметр - Digits - задаёт число цифр в 16-ричном числе.

 

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

 

function StrToInt(const S: string): Integer;

 

Причём строка S может содержать не только десятичное, но и 16-ричное число.

 

Например, функции StrToInt(’$07D9’) и StrToInt(’2009’) вернут одно и то же число 2009.

 

Однако эта функция «опасна»: если в строке обнаружится хотя бы один неверный символ, возникнет ошибка. Если у вас есть обоснованные со­мнения в правильности строки, лучше обратиться к надёжной функции 


function TryStrToInt(const S: string; out Value:     Integer):Boolean; 
var b: boolean; i: integer; 
b:=TryStrToInt(’$07D9s’, i); 
if b then lstProtokol.Items.Add (inttostr(i)); 

Она возвращает TRUE, если строка преобразована в число без ошибок, и FALSE, если с ошибками. Переменная Value (в нашем примере i) хранит число.

В примере строка '$07D9s' содержит неверный символ «s», поэтому функ­ция вернёт FALSE и строку печатать не нужно (на самом деле значение переменной i будет равно 2009, так как функция успеет конвертировать первые символы строки - до первой «нецифры»).

 

Так же можно использовать и процедуру:

procedure Val(S: string; var V: Type; var Code: Integer);

S - это строка,

V - переменная целого или действительного типа.

 

Code - переменная целого типа, в которой возвращается номер ошибочно­го символа в строке. Если таких символов нет, то значение этой перемен­ной будет равно нулю. 

Процедуры и функции для работы со строками в Delphi

В результате выполнения этого примера будет напечатано число 2009.

Процедуры и функции для работы со строками в Delphi

Этот код также напечатает число 2009, но значение переменной i будет равно не нулю, как в первом случае, а 6, так как шестой символ строки не является 16-ричной цифрой.

Аналогичные функции для вещественных чисел:


function StrToFloat(const S: string): Extended;
function TryStrToFloat(const S: string; out Value: Extended):Boolean;
function TryStrToFloat(const S: string; out Value: Double): Boolean;
function TryStrToFloat(const S: string; out Value: Single):
Boolean;

В начале и/или конце строки могут присутствовать ненужные пробелы. От них легко избавитьсяприменив функции

function TrimLeft(const S: string): string;
function TrimRight(const S: string): string;
function Trim(const S: string): string;

Первая удаляет начальные пробелы, вторая - конечные, третья - и те, и другие. Эти функции возвращают новую строку - уже без пробелов.

Узнать длину строки (число символов в ней) можно с помощью функции

function Length(S: string): Integer;

Например, Length (S1) вернёт 9, а Length(S2) - 7.

Ну, а теперь - самые интересные процедуры и функции!

Удаляем часть строки S от символа номер Index:

procedure Delete(var S: string; Index: Integer; Count: Integer);

Здесь Count - число удаляемых символов.

Например, после выполнения процедуры:

delete(s1,1,3);

строка si будет иметь значение «РОДИНА». 

А после процедуры delete(s2,5,3); строка s2 будет урезана до «ПАРА».

Если значение переменной Index меньше единицы или больше длины строки, то строка останется без изменений. Ничего не слу­чится со строкой и если Count меньше единицы.

Если же Count больше, чем число символов в строке, начиная с In­dex, то будут удалены все символы до конца строки.

Процедура Insert действует противоположно - она вставляет подстроку Substr в строку Dest после символа номер Index:

procedure Insert(Substr: string; var Dest:     string; Index: Inte­ger);

Например, после выполнения процедуры insert (’З’, s1,6); строка s1 превратится в смешное слово «СМОРОЗДИНА».

А процедура insert (’КА’, s2,8); позволит нам насладиться неологиз­неологиз­мом «ПАРАШЮТКА».

Если же мы не хотим портить исходную строку, как это делает процедура Delete, то можем создать новую строку, вырезав из любой строки нужный нам кусок:

function Copy(S: string; Index: Integer; Count: Integer): string;

 

Например, строка s примет значение «ПАРА» после выполнения функции s:=copy(s2,1,4);

 

 

Обратите внимание: чтобы получить то же самое слово, что и в примере с delete(s2,5,3);, мы указали другие значение параметров в вызове функции!

 

Функция copy (s1,4,9) вернёт в переменную s слово «РОДИНА».

 

И последняя функция находит позицию подстроки substr в строке str. function Pos(const substr: string; const str: string): Integer;

Если в строке искомая подстрока встречается несколько раз, то первый вызов функции Pos вернёт позицию первого вхождения, после чего поиск нужно продолжить со следующей позиции. Например, в слове ФЕЛЬДФЕБЕЛЬ так можно найти обе «ели».

Для наших слов:


i := pos ('МОР', s1); вернёт 2, а
i:= pos ('АШ', s2); - 4.

Если же подстроки в строке нет, то вернётся безнадёжный ноль!

������� ������ ��� dle ������� ��������� ������

Помоги проекту! Расскажи друзьям об этом сайте: