![](/user_photo/2706_HbeT2.jpg)
- •Билет № 25 Язык pascal. Обзор типов данных pascal.
- •Билет # 26 Обзор основных операций в pascal.
- •Билет №27 Обзор математических операций и стандартных функций в pascal.
- •Билет № 28 Обзор стандартных функций преобразования типов в pascal.
- •Билет № 29 Обзор стандартных функций обработки строк в pascal.
- •Билет № 30 Обзор стандартных функций модуля crt в pascal
- •Билет № 31 Обзор стандартных функций модуля graph в pascal.
- •Билет №32 Обзор основных операторов в pascal.
- •Билеты №34 Операторы повторения (цикла) в pascal.
- •Билет №35 Выражения в pascal. Правила их описания.
- •Возведение в вещественную степень выполняется по формуле
- •Билет № 36 Преобразование типов в pascal
- •Билет № 37 Структура программы на pascal
- •Билет № 38 Понятие блока операторов в pascal. Понятие локальных и глобальных переменных
- •Билет №39 Организация ввода-вывода в pascal
- •Билет №40 Обзор основных структурированных типов в pascal
- •Билет №41 Работа с массивами в pascal
- •Билет №42 Работа со строками в pascal
- •Билет №43 Работа с множествами в pascal
- •Билет №44 Работа со структурами в pascal
- •Билет №45 Работа со звуком в pascal
- •Билет №46 Работа с графикой в pascal
- •Билет №47 Работа с текстовыми файлами в pascal
- •Билет №48 Работа с типизированными файлами в pascal
- •Билет №49 Организация и работа с пользовательскими функциями в pascal
- •Билет №50 Использование рекурсивных функций
Билет №41 Работа с массивами в pascal
Билет №42 Работа со строками в pascal
Работа со строками Delphi позволяет извлечь из строки необходимую информацию и представить её в нужном виде. Система предоставляет весь спектр необходимых функций для работы со строками Delphi и преобразования строк Delphi в необходимые форматы:
числовой формат, целый и дробный с плавающей точкой;
формат времени, даты, даты-времени;
преобразование символов к верхнему или нижнему регистру;
сравнение строк, поиск в строке и копирование подстроки;
и многие другие...
Непосредственно сами строки Delphi поддерживают единственную операцию, так называемую операцию конкатенации, то есть присоединения. Несмотря на "научное" название, операция конкатенации выполняет очень простую процедуру. С помощью операции конкатенации одна строка присоединяется к другой:
var S, S1, S2: String;
begin
S:=S1+S2;
end;
Результирующая строка S будет суммой двух слагаемых строк. Длина строки, то есть количество символов в строке, возвращается встроенной функцией
function Length(S: String): Integer;
Delphi работает со строками типа String, в котором длина строки записывается в начале строки, перед первым символом. Поэтому индекс первого символа в строке не 0, а 1. То есть, если:
S:='Строка типа String';
то S[1] - символ 'С', S[2] - символ 'т', последний символ в строке - S[Length(S)], равный 'g'.
Однако часто приходится иметь дело со строками типа PChar, которые использует операционая система Windows. В строках типа PChar длина строки определяется специальным символом конца строки - #0. Поэтому для использования функций Windows тип String необходимо предварительно переводить в тип PChar. Преобразование типа String в тип PChar выполняет функция
function PChar(S: String): PChar;
Для полноценной работы со строками Delphi используются следующие стандартные процедуры и функции:
Функции преобразования в числовой формат и обратно
Выполняя вычисления, используем для ввода данных и отображения результатов следующие функции, работающие со строками Delphi:
функция IntToStr(N: Integer): String
Преобразует целое число N в строку.
функция StrToInt(S: String): Integer
Преобразует строку S в целое число.
функция FloatToStr(X: Extended): String
Преобразует число с плавающей точкой X в строку.
функция StrToFloat(S: String): Extended
Преобразует строку S в число с плавающей точкой.
Процедуры и функции преобразования дат и времени
Сначала собственно функции, предоставляющие информацию о текущих дате и времени:
функция Now: TDateTime
Возвращает текущую дату и время.
функция Date: TDateTime
Возвращает текущую дату.
функция Time: TDateTime
Возвращает текущее время.
Далее, функции, работающие с составляющими даты и времени (год, месяц, число, день недели, часы, минуты, секунды и даже миллисекунды):
функция DayOfWeek(Date: TDateTime): Integer
Возвращает текущий номер дня недели: 1 - воскресенье, 7 - суббота.
процедура DecodeDate(Date: TDateTime; var Year, Month, Day: Word)
Разбивает дату Date на год - Year, месяц - Month и день - Day.
процедура DecodeTime(Time: TDateTime; var Hour, Min, Sec, MSec: Word)
Разбивает время Time на час - Hour, минуты - Min, секунды - Sec и миллисекунды - MSec.
функция EncodeDate(Year, Month, Day: Word): TDateTime
Объединяет год - Year, месяц - Month и день - Day в значение типа TDateTime.
функция EncodeTime(Hour, Min, Sec, MSec: Word): TDateTime
Объединяет час - Hour, минуты - Min, секунды - Sec и миллисекунды - MSec в значение типа TDateTime.
Наконец, собственно, функции, переводящие дату и время из формата TDateTime в строчный формат:
функция DateTimeToStr(DateTime: TDateTime): String
Преобразует дату и время DateTime в строку.
функция DateToStr(Date: TDateTime): String
Преобразует дату Date в строку.
функция TimeToStr(Time: TDateTime): String
Преобразует время Time в строку.
Следующие функции работают с параметрами возвращаемой строки. Функции с приставкой Ansi работают в том числе и с кириллическими символами. Если символы в строках предполагаются исключительно латинские, то можно использовать аналогичные функции, но без приставки Ansi:
функция AnsiLowerCase(const S: String): String
Возвращает строку S, преобразованную к нижнему регистру.
функция AnsiUpperCase(const S: String): String
Возвращает строку S, преобразованную к верхнему регистру.
функция Length(const S: String): Integer
Возвращает количество символов в строке S.
функция Trim(const S: String): String
Удаляет из строки S начальные и завершающие пробелы и управляющие символы.
функция TrimLeft(const S: String): String
Удаляет из строки S начальные пробелы и управляющие символы.
функция TrimRight(const S: String): String
Удаляет из строки S завершающие пробелы и управляющие символы.
Следующие функции сравнивают две строки между собой:
функция AnsiCompareStr(const S1, S2: String): Integer
Сравнивает две строки S1 и S2 с учётом регистра символов.
Возвращает значение <0 если S1<S2, 0 если S1=S2, >0 если S1>S2
функция AnsiCompareText(const S1, S2: String): Integer
Сравнивает две строки S1 и S2 без учёта регистра символов.
Возвращает значение <0 если S1<S2, 0 если S1=S2, >0 если S1>S2
Следующие функции осуществляют поиск в текущей строке подстроки, вставляют, удаляют или заменяют подстроку:
функция Pos(Substr: String; Str: String): Integer
Возвращает позицию (индекс) первого вхождения Substr в строке Str. Если Substr нет в Str, возвращает 0.
функция Insert(Source: String; var S: String; Index: Integer): Integer
Вставляет строку Source в строку S, начиная с номера символа, равного Index
процедура Delete(var S: String; Index, Count: Integer)
Удаляет из строки S подстроку, начинающуюся с номера символа, равного Index, и содержащую до Count символов.
функция StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): String
Заменяет в строке S подстроку OldPattern на строку NewPattern с учётом флага TReplaceFlags. Для работы с этой функцией нужно создать переменную типа TReplaceFlags - это множество, и включить в него одно или оба значения из следующих:
rfReplaceAll - будут заменены все вхождения. Если это значение не будет включено во множество, то будет заменено только первое вхождение;
rfIgnoreCase - замена будет без учёта регистра символов. Если это значение не будет включено во множество, то замена будет чувствительна к регистру символов.
Наконец, функция копирования части строки:
функция Copy(S: String; Index, Count: Integer): String
Возвращает подстроку строки S, начиная с номера символа, равного Index и содержащую до Count символов.
Помимо прочего, эту функцию можно использовать для вывода нецелого числа с нужным количеством цифр после запятой. Для этого, сначала получаем строку из числа формата Real, затем находим функцией Pos позицию запятой в этой строке, прибавляем нужное количество и копируем в результат это количество символов. Вот готовая функция:
function RealToStr(X: Real; Count: Integer): String;//Count - количество цифр после запятой
var S: String;
N: Integer;
begin
S:=FloatToStr(X); //после запятой - длинная последовательность цифр
N:=Pos(',', S); //позиция запятой в строке
N:=N+Count; //вычисляем длину строки с нужным количеством знаков после запятой
Result:=Copy(S, 1, N);
end;
В комментариях Андрей предложил поправку в этой функции. Дело в том, что разделитель целой и дробной частей на разных компьютерах может быть и ',' и '.' - зависит от локальных настроек. Для учёта этого в Delphi существует встроенная константа DecimalSeparator типа Char, принимающая значение символа-разделителя целой и дробной частей. Соответственно, оператор
N:=Pos(',', S); //позиция запятой в строке
будет выглядеть так:
N:=Pos(DecimalSeparator, S);