Главная » Просмотр файлов » Основы Object Pascal

Основы Object Pascal (551739), страница 5

Файл №551739 Основы Object Pascal (Основы Object Pascal) 5 страницаОсновы Object Pascal (551739) страница 52015-11-14СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 5)

end;

В этом примере для определения длины строки используется значение S[0]. Можно также воспользоваться функцией Length.

ПРИМЕЧАНИЕ. Для преобразования значения типа Char в целую величину используется функция Ord. Функция Ord также применяется к перечислимым типам.

Ели это необходимо, первому элементу короткой строки можно присвоить значение длины. Это может потребоваться в некоторых специальных случаях. Отметим, что программное изменение длины строки относится к «продвинутой» технике и начинающим программистам этого делать не стоит.

Длинная строка

Строки этого типа относятся к объектам, которые размещаются в памяти динамически. Размер такой строки ограничен лишь доступным объемом оперативной памяти. Object Pascal выделяет и освобождает память для строк рассматриваемого типа по мере необходимости. Длинные строки – очень гибкий тип данных, но операции над ними требуют большего времени. Это объясняется необходимостью перераспределения памяти когда размер строки изменяется. Несмотря на это, в программах следует использовать строки именно этого типа.

Для объявления длинной строки используется ключевое слово string без спецификации длины:

var

S : string; { динамически размещаемая длинная строка }

Длинные строки не содержат 0–го элемента длины. Попытка прочитать нулевой элемент, обратившись к нему как S[0], будет пресечена на этапе компиляции. Вместо этого надо пользоваться функцией Length чтобы узнать длину строки, или процедурой SetLength – чтобы установить требуемую длину строки. Более подробно об этом – в разделе «Строковые функции».

Расширенная строка

Этот тип применяется при обращении к тем функциям Windows API, которые работают со строками символов Unicode, где каждый символ представлен двухбайтным кодом. Размер строки ограничен только доступным объемом памяти. В основном, строки этого типа необходимы при работе с функциями OLE (Object Linking and Embedding).

Строка с терминальным нулем

Строка с терминальным нулем это массив символов, последним элементом которого является символ #0. Такие строки не содержат нулевого байта длины. Терминальный ноль используется как признак конца строки. Большинство функций Windows API требуют, чтобы их параметры были массивами символов. Строковые типы Pascal к таковым не относятся, следовательно, необходим механизм, позволяющий использовать Pascal–строки в функциях Windows. Таким механизмом является тип PChar. Его можно использовать всюду, где требуются массивы символов.

В качестве примера рассмотрим функцию Windows API MessageBox. Эта функция отображает стандартный диалог сообщения. Ее объявление имеет вид:

function MessageBox(hWnd: HWND; lpText, lpCaption: PChar;

uType: UINT): Integer;

Второй и третий параметры являются указателями на массивы символов: второй параметр указывает на текст сообщения, а третий – на заголовок диалогового окна. Чтобы обратиться к этой функции из Delphi – программы, следует воспользоваться типом PChar:

var

Text : string;

Caption : string;

begin

Text := This is a test;

Caption := Test Message;

MessageBox(0, PChar(Text), PChar(Caption), 0);

end;

Здесь PChar используется для преобразования длинной строки к типу строки с терминальным нулем.

Можно также явно применить переменную типа PChar:

var

Text : PChar;

begin

Text := 'This is a test.';

MessageBox(0, Text, 'Message', 0);

end;

В Pascal–программах тип PChar используется сравнительно редко. В основном, вы будете иметь дело с типом string. При необходимости всегда можно преобразовать этот тип в строку с терминальным нулем так, как это сделано в примерах выше.

Обратите внимание на то, что фактическим параметром типа PChar, передаваемым в функцию Windows API, может быть литерал – строка символов, заключенная в кавычки.

В конце концов, вы можете использовать фактические параметры типа array of Char вместо PChar. Эту возможность иллюстрирует следующий фрагмент кода:

var

Text : array [0..20] of Char;

begin

Text := 'This is a test.';

MessageBox(0, Text, 'Message', 0);

end;

На самом деле не важно, какой способ обеспечения совместимости вы будете применять. Просто поймите то, что нельзя передавать фактические параметры строковых типов языка Pascal в процедуры и функции Windows API, которые «понимают» только строки с терминальным нулем. В таких случаях используйте тип PChar или массив array of Char.

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

Слияние

Чаще всего используется операция слияния строк, для чего применяют знак сложения (+):

var

S1 : string;

S2 : string;

begin

S1 := 'Аппаратура;

S2 := 'работает нормально';

Label1.Caption := S1 + ' ' + S2;

end;

Последний оператор этого кода выполняет слияние трех строк – переменной S1, литерала «пробел» и переменной S2. Результат слияния присваивается свойству «заголовок» (Caption) компонента формы типа «надпись».

В операции слияния строк могут присутствовать любые выражения строкового типа, например:

var

X : Integer;

begin

X := 70;

Label1.Caption := IntToStr(X)+ ' секунд – полет нормальный';

end;

Здесь функция IntToStr преобразует числовое значение переменной X в строку, а результат соединяется с литералом.

Извлечение символа

Нумерация символов в строке ведется с единицы. Любой символ строки доступен по его порядковому номеру (индексу) в строке:

var

S1 : string;

S2 : Char;

begin

S1 := 'Hello World!';

S2 := S1[1];

Label1.Caption := S2;

end;

Управляющие символы в строках

В строку можно включить управляющие символы.

Поместите на форму командную кнопку и надпись. Дважды щелкните на кнопке и введите следующий код обработчика события OnClick:

p
rocedure
TForm1.Button1Click (Sender: TObject);

var

Line1 : string;

Line2 : string;

Y : integer;

begin

Y := 50;

Line1 := IntToStr(Y) +  секунд;

Line2 := Полет нормальный;

Label1.Caption := Line1 + #10 + Line 2;

end;

Выполните программу – увидите две строки надписи. В этом коде в строку вставлен символ возврата каретки (код ASCII 10).

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

Часто бывает необходимо разместить длинный литерал на нескольких строках текста программы. Например, требуется вывести сообщение, содержащее 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.

Характеристики

Тип файла
Документ
Размер
599,5 Kb
Тип материала
Высшее учебное заведение

Список файлов учебной работы

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6310
Авторов
на СтудИзбе
312
Средний доход
с одного платного файла
Обучение Подробнее