Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Строковые функции




Сравнение строк

Разбиение литерала по строкам программы

 

Часто бывает необходимо разместить длинный литерал на нескольких строках текста программы. Например, требуется вывести сообщение, содержащее 200 символов. Максимальная длина одной строки текста в редакторе кода равна 1024 символам. На экране целиком умещается около 80 символов текста в одной строке. Следовательно, напечатать длинный текст в одной строке редактора можно, но читать его – с трудом.

Лучше всего разбить длинный текст – литерал на несколько строк исходной программы. Для этого просто используйте операцию слияния (+)

 

MessageBox(0, 'Файл изменен, но не был сохранен. ' +

'Сохранить его сейчас ' +

'или снова вернуться в режим редактирования? ',

'Message', 0);

 

 

Строки можно сравнивать друг с другом с помощью операций сравнения. Операции сравнения перечислены в таблице 1.3.

 

Таблица 1.3. Операции сравнения строк

 

Операция Описание
= Равно
<> Не равно
< Меньше
> Больше
<= Не больше
>= Не меньше

 

Сравнение строк основано на анализе кодов ASCII. Две строки считаются равными если они имеют одинаковую длину и содержат одинаковые последовательности символов. Операции «меньше – больше» используют для сортировки строк в алфавитном порядке. Чаще всего в программах применяется операции «равно – не равно»:

 

if FileName = 'TEST.TXT' then

OpenFile(FileName)

else

ReportError;

 

 

Object Pascal предоставляет большой набор процедур и функций, предназначенных для выполнения различных операций над строками. Наиболее употребительные функции перечислены в таблице 1.4.

 

Таблица 1.4. Строковые процедуры и функции

 

Имя Описание Пример
Copy Возвращает подстроку S:= Copy(Source,Index,Count); S:= Copy(’test.txt’,1,4);
Delete Удаляет часть строки Delete(S,Index,Count); Delete(’test.txt’,5,4);
Format Форматирует строку см. пример ниже
Insert Вставка подстроки в строку Insert(Source, SubStr,Index); Insert(’testtxt’,’.’,5);
IntToStr Преобразует целое число в строку Edit1.Text:= IntToStr(Width)
Length Возвращает число символов в строке N:= Length(Source);
LowerCase Преобразует все буквы строки в строчные Name:= LowerCase(Edit1.Text)
Pos Возвращает позицию подстроки в строке K:= Pos(SubStr,Source); K:= Pos(’.’,FileName);
StringOfChar Возвращает строку, заполненную заданным символом  
StrPas Преобразует строку с терминальным нулем (PChar или array of Char) в строку типа string const T: PChar=’0-строка’; var S: string; ........ S:= StrToPas(T);
StrPCopy Преобразует строку типа string в строку с терминальным нулем const S = ’Обычная строка’; var T: PChar;   T:= StrPCopy(S);
StrToInt Преобразует строку в целое число Width:= StrToInt(Edit1.Text);
StrToIntDef Преобразует строку в целое число. Возвращает значение по умолчанию в случае ошибки   Width:= StrToIntDef(Edit1.Text,’120’);

 

StrToXXX Преобразование строки в специальный тип данных var D,T: TDateTime;   D:= StrToDateTime(Edit1.Text) T:= StrToTime(Edit1.Text);
Trim Удаляет из строки пробелы если они есть в ее начале и в конце  
UpperCase Преобразует все буквы строки в заглавные FileName:= UpperCase(Edit1.Text);
XXXToSTr Преобразование данных специальных типов в строку Edit1.Text:= DateTimeToStr(T)

 

 

Дадим пояснения к функциям таблицы 1.4.

Функция StrToInt преобразует строку, содержащую текстовое представление целого числа в значение целого типа. Допустим, что на форме приложения имеется компонент редактирования (Edit), с помощью которого пользователь должен ввести значение целого числа. Компонент Edit работает только с текстом. Поэтому получить этот текст как значение целого числа следует так:

 

StepNo:= StrToInt(Edit1.Text);

 

где StepNo – переменная типа integer.

Остальные функции StrToXXX (StrToFloat, StrToDate, и т.д.) работают точно также. Любая из этих функций создает исключительную ситуацию если не может выполнить преобразование строки в число. Например, если пользователь введет S123 вместо 123, возникнет ошибка времени выполнения (исключительная ситуация) так как символ S нельзя интерпретировать как цифру.

Функция Format используется довольно часто. Ее удобно применять для формирования текстов сообщений, содержание которых зависит от переменных параметров. Рассмотрим следующий текст

 

Спутник <…> выведен на <…> орбиту высотой <…> км.

 

Здесь угловыми скобками отмечены переменные составляющие текста - параметры. Пусть первый параметр – наименование спутника; второй – одно из слов «расчетную/нерасчетную»; третий параметр – целое число. Следующий фрагмент кода – текст функции, которая возвращает отформатированное сообщение.

 

 

function GetSituationTxt(const SatName:string;

Situation:boolean; Altitude:integer):string;

const

sTextToFormat=

’Спутник %s выведен на %s орбиту высотой %d км’;

sSitTxt:array[boolean] of string=

(’нерасчетную’,’расчетную’);

begin

Result:=Format(sTextToFormat,

[SatName, sSitTxt[Situation], Altitude]);

end;

 

Исходная строка представлена константой sTextToFormat. Символы %s в ней означают, что вместо них надо подставить параметр – строку, а символы %d обозначают место вставки значения целого числа. Подставляемые параметры перечисляют через запятую и заключают в квадратные скобки. Типы значений параметров не должны противоречить символам форматирования. Подробные сведения о форматировании строк функцией Format приведены в следующем разделе.

 

Форматирование строк

 

Форматируемая строка, передаваемая в функцию Format может содержать обычный текст и спецификации формата. Текст копируется в результирующую строку без изменения. Спецификация формата извлекает из списка аргументов очередной параметр и преобразует его в строку т.е. форматирует в соответствии с информацией, закодированной в спецификаторе.

Спецификатор формата имеет вид:

 

% [index:] [-] [width] [. prec] type

 

Здесь квадратные скобки охватывают необязательные элементы конструкции.

Любая спецификация формата начинается с символа %. После % следуют параметры спецификации в следующем порядке:

 

индекс аргумента [ index: ]

признак выравнивания влево, [ - ]

спецификация ширины, [ width ]

спецификация точности, [. prec ]

код формата, type

 

Допустимые коды перечислены в следующей таблице:

 

Код Описание
d Десятичный. Соответствующий аргумент должен быть целым числом. Значение аргумента преобразуется в строку десятичных цифр. Если указан спецификатор точности, то отформатированное значение будет содержать это количество символов. Если аргумент содержит меньше цифр, то слева добавляется недостающее число нулей.
e Научный. Аргумент должен быть вещественным числом. Его значение преобразуется в строку вида "-d.ddd...E+ddd". Знак ставится если число отрицательное. Десятичной точке предшествует всегда одна цифра. Общее число цифр (включая одну перед точкой) определяется спецификатором точности. По умолчанию число цифр равно 15. За символом экспоненты "E" всегда следует знак плюс или минус и, по-крайней мере, 3 цифры.
f Фиксированный. Аргумент должен быть вещественным числом. Его значение преобразуется в строку вида "-ddd.ddd...". Знак ставится если число отрицательное. Число цифр после точки определяется спецификатором точности. Если спецификатор точности отсутствует после точки по умолчанию будет две цифры.  
g Универсальный. Аргумент должен быть вещественным. Его значение преобразуется в строку минимально возможной длины либо фиксированного, либо научного формата. Количество значащих цифр результата зависит от значения, заданного спецификатором точности. По умолчанию это 15 цифр. Незначащие нули удаляются из результата, а десятичная точка присутствует только когда она необходима. При преобразовании применяется фиксированный формат если число цифр слева от десятичной точки меньше или равно значению спецификатора точности и форматируемое значение не меньше 0.00001. В противном случае применяется научный формат.  
n Числовой. Аргумент должен быть вещественным числом. Его значение преобразуется в строку вида "-d,ddd,ddd.ddd...". Этот формат аналогичен формату "f" с той разницей, что добавляются разделители тысяч.  
m Денежный. Аргумент должен быть вещественным числом. Его значение преобразуется в строку с учетом текущих значений глобальных переменных CurrencyString, CurrencyFormat, NegCurrFormat, ThousandSeparator, DecimalSeparator, CurrencyDecimals, взятых из раздела «Язык и стандарты» панели управления Windows. Если задан спецификатор точности, его значение используется вместо CurrencyDecimals.
p Адрес. Аргумент должен быть указателем Его значение преобразуется в строку вида "XXXX:YYYY" где XXXX и YYYY сегмент и смещение, выраженные в 16-ричной системе счисления.  
s Строка. Аргумент должен быть символом, строкой типа string или строкой PChar. Строковый аргумент вставляется в результирующую строку вместо спецификатора формата. Спецификатор точности устанавливает максимальную длину результата (количество символов). Если аргумент–строка имеет большую длину, «лишние» символы отбрасываются.  
x Шестнадцатеричный. Аргумент должен быть целым числом. Его значение преобразуется в строку 16-ричных цифр.  

 

 

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

При форматировании вещественных значений используются разделители дробной части и тысяч, определенные в секции «Язык и стандарты» панели управления Windows. Во время выполнения программы они записаны в глобальных переменных DecimalSeparator и ThousandSeparator.

Значения спецификаторов index, width, и precision могут быть указаны явно (например "%10d"), либо неявно с помощью символа * (например "%*.*f"). В последнем случае следующий по порядку аргумент из списка (он должен быть целым числом) используется как соответствующий спецификатор. Например,

 

Format('%*.*f', [8, 2, 123.456])

 

то же самое что и

 

Format('%8.2f', [123.456]).

 

Спецификация width задает минимально допустимую ширину поля. Если результирующая строка короче ширины поля, в нее добавляется соответствующее число пробелов. По умолчанию результат выравнивается вправо, но если спецификация формата содержит знак (-), то результат выравнивается влево.

Спецификатор индекса (index) явно указывает на аргумент в списке. Индекс первого аргумента в списке равен 0. Используя спецификацию индекса можно форматировать одни и те же аргументы несколько раз. Например, результатом Format('%d %d %0:d %d', [10, 20]) будет строка вида '10 20 10 20'.

 

 




Поделиться с друзьями:


Дата добавления: 2015-04-29; Просмотров: 591; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.