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 только чисел.


 

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

82292. Развитие промышленности в 70-80-е годы и ее сырьевая направленность 30.54 KB
  Быстрыми темпами развивалась легкая промышленность республики. В структуре экспортных поставок республики 97 приходилось на сырье. Состояние республики определялось не уровнем жизни населения полнотой и реальностью ее суверенных прав в Союзе ССР развитием духовной культуры а суммой капиталовложений тоннами добытой руды угля нефти и других ресурсов. Таким образом в экономике республики в 7080–е годы проявились все те деформации которые были характерны для народного хозяйства страны в целом.
82293. Экономическая политика в годы гражданской войны 30.88 KB
  Первыми мероприятиями советской власти в Казахстане стали: национализация крупной промышленности банков и транспорта весной 1918 года; возращение крестьянам 35 млн. Для Казахстана продразверстка стала настоящим бедствием: поголовье скота составило всего 545 в 1920 году по сравнению с 1913 годом Сокращение произошло с 299 млн. в 1913 году до 163 млн. голов в 1920; посевные площади с 42 млн.
82294. Развитие сельского хозяйства в сер.60-х-нач.80-х годы 31.31 KB
  Уравнительное распределение заработной платы снижала заинтересованность рабочих в результатах своего труда объемы производства и качество продукции. Наращивание производства сельскохозяйственных продуктов в республике проходило крайне неравномерно более высокие темпы прироста были достигнуты в девятой пятилетке – 3 в год. Неустойчивым было развитие зернового производства.
82295. Создание Киргизской (Казахской) АССР и КазССР 27.83 KB
  Казревком также занялся подготовкой Учредительного съезда Советов Казахстана. 5 декабря 1936 года VIII Чрезвычайный съезд Советов СССР принял новую Конституцию в составе которой было 11 союзных республик в том числе и КазССР.
82296. Международные связи Казахстана в сер.60-х-нач.80-х годов 35.09 KB
  Во внешней политике СССР основными задачами оставались: устранение угрозы распада социалистической системы ее сплочение в политическом военном и экономическом отношениях; нормализация отношений между Востоком и Западом сосуществование в сотрудничестве. Эта политика была особенно активна иногда перерастала в прямую интервенцию в отношении стран находившихся в непосредственной сфере влияния СССР например Афганистан. Этим в свою очередь объяснялось достижение военностратегического паритета СССР и США а также рост революционной...
82297. Казахстан в условиях НЭПа. Причины перехода и сущность 28.14 KB
  Предприятия ж дорожного автомобильного транспорта добывающей и обрабатывающей промышленности были переведены на хозрасчет. К 1928 году было завершено восстановление промышленности Казахстана. Из-за большой разницы цен на продукты с х низкие и промышленности высокие крестьяне перестали сдавать зерно государству.
82298. Экологические проблемы Казахстана на современном этапе (движение Невада-Семипалатинск, Арал, Балхаш и т.д.) 33.34 KB
  Высыхание Аральского моря и возникновение зоны экологического бедствия в регионе стало возможным в результате неэкономного использования воды рек Сырдарьи и Амударьи. Сырдарья в настоящее время не доходит до моря заканчивая свой путь на полях а Амударья достигает Арала лишь зимой тоненьким ручейком. Осушенное дно моря становится источником пыли и солей разносимых на очень большие расстояния. Площадь моря разделилась на несколько самостоятельных водоемов море отошло от берегов местами на 100150 км и продолжает расчленяться.
82299. Земельно- водная реформа 1921 г, ее цели и сущность 29.36 KB
  Аграрные преобразования способствовали возвращению и укреплению социально экономического положения 300 тысяч беженцев казахов и киргизов эмигрировавших в 1916 году в Китай. Реформа способствовала укреплению союза рабочего класса и казахских шаруа узбекских дунганских уйгурских дехкан укреплению национального согласия. Кредит семенные ссуды и другие средства экономического регулирования способствовали укреплению связи государства с трудовым крестьянством восстановлению производительных сил росту трудовой активности трудящихся аула и...
82300. Противоречивость хода перестройки в Казахстане 30.94 KB
  Черненко Генеральным секретарем КПСС становится М. В преддверии поворотного ХХVII съезда КПСС в период его практической подготовки 15 января 1986 г. было опубликовано Заявление Генерального секретаря ЦК КПСС в котором была выдвинута конкретная рассчитанная на точно определенный срок до конца нынешнего столетия программа мероприятий направленных на полную и повсеместную ликвидацию ядерного и других видов оружия массового поражения. ХХVII съезде КПСС была принята новая философия внешней политики Советского Союза.