28623

Работа со строками Delphi

Доклад

Информатика, кибернетика и программирование

С помощью операции конкатенации одна строка присоединяется к другой:var S S1 S2: String;begin S:=S1S2;end; Результирующая строка S будет суммой двух слагаемых строк. Длина строки то есть количество символов в строке возвращается встроенной функцией function LengthS: String: Integer; Delphi работает со строками типа String в котором длина строки записывается в начале строки перед первым символом. То есть если:S:='Строка типа String';то S[1] символ 'С' S[2] символ 'т' последний символ в строке S[LengthS] равный 'g'....

Русский

2013-08-20

26.31 KB

10 чел.

Работа со строками Delphi позволяет извлечь из строки необходимую информацию и представить её в нужном виде. Система предоставляет весь спектр необходимых функций для работы со строками Delphi и преобразования строк Delphi в необходимые форматы:

  1.  числовой формат, целый и дробный с плавающей точкой;
  2.  формат времени, даты, даты-времени;
  3.  преобразование символов к верхнему или нижнему регистру;
  4.  сравнение строк, поиск в строке и копирование подстроки;
    и многие другие...

   Непосредственно сами строки 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);

   Или вот, к примеру, текст модуля, обеспечивающего 
ввод в компонент Edit только чисел.


 

А также другие работы, которые могут Вас заинтересовать

83183. Моя будущая профессия – инженер-строитель 22.28 KB
  Задачи: Рассмотреть разные профили инженера строителя Раскрыть основные проблемы дорожного строительства Когда мы задумываемся о своей будущей профессии в первую нас интересует ее полезность и практичность. Возьмём сферу дорожного строительства и на её примере рассмотрим основные функции строительства в общем так как из всех сфер строительства нашей...
83184. Франчайзинг товарный и производственный 36 KB
  Итак что же скрывает в себе это слово Под франчайзингом понимается ведение бизнеса под арендованным товарным знаком. Одна из первых успешных франчайзинговых систем была применена компанией Generl Motors. На сегодняшний день можно выделить три основных вида франчайзинга.
83186. Economics in our life 14.92 KB
  Much time was spent by people on the study of economics. This is a very ancient science. It existed even before emergence of electricity, cars and means of communications. But economics as the academic discipline is rather new.
83187. The problems of young people 15.64 KB
  All people have problems. Some people have a lot of problems, others have one or two. And no matter how old you are, you will still face difficulties in your life. We can solve some problems but some problems are very hard to solve.There are a lot of teenagers in our country.
83188. Війни виграють не генерали, війни виграють шкільні учителі 38 KB
  Мені здається, що сьогодні вчити і виховувати дітей складніше, ніж колись. Життя стало непередбачуванішим, з’явилося багато нової інформації, техніки, змінилося ставлення до деяких моральних цінностей. Я впевнена, що професія вчителя – одна з найважливіших у нашому суспільстві.
83189. Стратегический менеджмент как сфера профессиональной деятельности 38.25 KB
  Процесс разработки стратегий включает: 1 определение корпоративной миссии; 2 конкретизацию видения корпорации и постановку целей; 3 формулировку и реализацию стратегии направленной на их достижение. Вместе с тем разработка стратегии на практике процесс творческий.
83190. Славянофильство и западничество: куда идти России? 33.5 KB
  К предыстории относится период с десятых до середины тридцатых годов девятнадцатого столетия. В начале тридцатых годов большинство будущих славянофилов исключая Хомякова были приверженцами философии Шеллинга и их позиция была скорее западнической чем славянофильской.
83191. ИНТЕРНЕТ-ЭКОНОМИКА РОССИИ 40.22 KB
  Как последствие эффективность финансовой работы в современной экономике впрямую находится в зависимости от интенсивности переустройства информации а апофеозом эволюции информационно-коммуникационных технологий стало возникновение Интернета в общем и Интернет-экономики eeconomy в частности.