AnsiIndexStr — Функция Delphi


AnsiIndexStr — Функция Delphi

Строки в Delphi состоят из одоного (тип ShortString ) или двух байтов (тип AnsiString, WideString ), содержащих указание количества символов в строке, и последовательности символов. Таким образом ShortString максимально может содержать до 255 символов и занимать память 2 байта ..256 байт, а AnsiString или WideString — максимально могут содержать примерно 2 x 10 30 символов и занимать память 4 байта .. 2 Гбайта.

В типе AnsiString символы кодируются в коде ANSI, а в типе WideString — в коде Unicode.

Общим типом является тип String , который может соответствовать как типу ShortString , так и типу AnsiString . Это определяется директивой компилятора $H . По умолчанию используется <$H+>, и тип String равен типу AnsiString .

Кроме того имеется тип PChar , представляющий так называемую строку с завершающим нулем. Строки с завершающим нулем не содержат байтов длины. В отличие от обычных строк они состоят из последовательности ненулевых символов, за которым следует символ NULL (#0). Никаких ограничений на длину строк с завершающим нулем не накладывается. Фактически он указывает на символ

Расширенный синтаксис позволяет ставить в соответствие строкам с завершающим нулем символьный массив типа

где X — положительное число типа Integer , определяющее количество символов в строке, не считая завершающего символа с кодом 0. В отличие от типа String , символ с индексом 0 здесь является первым символом строки, а последний символ с индексом X — завершающим символом с кодом 0. (см. Функции работы со строками с завершающим нулем)

Список литературы:

  1. Гофман В.Э., Хомоненко А.Д. Delphi 6. — СПб. БХВ-Петербург, 2002. — 1152 с.: ил.
  2. Турбо Паскаль 7.0 — К. Торгово-издательское бюро BHV, 1996 — 448 с.: ил.
  3. Delphi7 Help

Функции Delphi модуля StrUtils

Модуль StrUtils

Предлагаем список функций модуля StrUtils, используемого в среде разработки Delphi.

AnsiContainsStr Возвращается истина, если строка содержит подстроку
AnsiEndsStr Возвращется истина, если строка заканчивается подстрокой
AnsiIndexStr Сравнивает строку со списком строк, возвращает соответствующий индекс
AnsiLeftStr Извлечённые символы слевой стороны строки
AnsiMatchStr Возвращается истина, если строка точно соответствует какой-либо строке из списка
AnsiMidStr Возвращает подстроку из средних символов строки
AnsiReplaceStr Заменяет часть одной строки другой
AnsiReverseString Переворачивает последовательность символов в строке
AnsiRightStr Извлечение символов с правой стороны строки
AnsiStartsStr Возвращается истина, строка начинается подстрокой
AnsiUpperCase Символы нижнего регистра изменяются на символы верхнего регистра
DupeString Создает строку, содержащую копии подстроки
StrToTime Конвертирует строку с временем в значение с типом TDateTime
StuffString Заменяет часть одной строки на другую
Succ Инкрементирует порядковую переменную

Использование случая с строкой — delphi

Скажем, у меня есть строка

и хотел, чтобы значения возвращались в случае case. Может ли это быть? Можно ли использовать строки в случае case

    9 4
  • 5 окт 2020 2020-10-05 12:45:33
  • Glen Morse

4 ответа

Работает на D7 и Delphi в Сиэтле, использует system.Anistring

case AnsiIndexStr(tipo, [E,R] ) of 0: result := yes; 1: result := no; end;

  • 5 окт 2020 2020-10-05 12:45:34
  • keno

@Даниэль ответ указал мне в правильном направлении, но мне потребовалось некоторое время, чтобы заметить часть «Jcl Library» и комментарии о стандартных версиях.

В [по крайней мере] XE2 и позже вы можете использовать:

Эта версия чувствительна к регистру, поэтому, если первым аргументом было «SomeName», это займет путь not present in array . Используйте IndexText для сравнения без учета регистра.

Для более старых версий Delphi используйте AnsiIndexStr или AnsiIndexText , соответственно.

Претензии к @Daniel, @The_Fox и @afrazier для большинства компонентов этого ответа.

AnsiIndexText

Searches, case insensitive, for a string in an array of strings.

Declaration

Source position: strutils.pp line 35

const AText : string ;

const AValues : array of string

Arguments

String to search for

Array of strings to search in.

Function result

Index of the matching element in the array, otherwise -1.

Description

AnsiIndexStr matches AText against each string in AValues . If a match is found, the corresponding index (zero-based) in the AValues array is returned. If no match is found, -1 is returned. The strings are matched ignoring case.

Errors

See also

Searches, observing case, for a string in an array of strings.

Check whether a string occurs in an array of strings, observing case.

Searches, observing case, for a string in an array of strings.

Check whether a string occurs in an array of strings, observing case.

Check whether a string occurs in an array of strings, disregarding case.

Использование случая с строкой

28 Glen Morse [2013-01-25 07:46:00]

Скажем, у меня есть строка

и хотел, чтобы значения возвращались в случае case. Может ли это быть? Можно ли использовать строки в случае case

4 ответа

29 Решение RRUZ [2013-01-25 08:11:00]

Delphi Case Statement поддерживает только порядковые типы. Таким образом, вы не можете напрямую использовать строки.

Но существуют другие варианты, например

  • построить функцию, которая возвращает целочисленный (хэш) на основе строки
  • с использованием дженериков и анонимных методов (Общий случай для строк)
  • используя функцию, которая получает массив строк (Создание случая для строк, разумный способ)
  • и т.д.

31 Daniel [2013-01-25 10:00:00]

В библиотеке Jcl у вас есть функция StrIndex StrIndex(Index, Array Of String) , которая работает следующим образом:

7 c32hedge [2020-03-16 01:21:00]

@Даниэль ответ указал мне в правильном направлении, но мне потребовалось некоторое время, чтобы заметить часть «Jcl Library» и комментарии о стандартных версиях.

В [по крайней мере] XE2 и позже вы можете использовать:

Эта версия чувствительна к регистру, поэтому, если первым аргументом было «SomeName», это займет путь not present in array . Используйте IndexText для сравнения без учета регистра.

Для более старых версий Delphi используйте AnsiIndexStr или AnsiIndexText , соответственно.

Претензии к @Daniel, @The_Fox и @afrazier для большинства компонентов этого ответа.

2 keno [2020-06-20 13:38:00]

Работает на D7 и Delphi в Сиэтле, использует system.Anistring

case AnsiIndexStr(tipo, [‘E’,’R’] ) of 0: result := ‘yes’; 1: result := ‘no’; end;

AnsiIndexStr — Функция Delphi

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Группа: Администраторы
Сообщений: 803
Пол: Мужской
Реальное имя: Евгений

Однажды пытался в Delphi найти функции обработки и разбора строк, но ничего не нашёл :(
По ходу действий стал писать свои и собрал уже некоторое количество функции, так вот предлагаю оставить здесь всё что было написано вами для собственных целей для сбора модуля для работы со строками.

А вот что получилось у меня:

// Функции для работы с ini файлами и для разбора строк
// Проверка строки на содержание данных (ini file)
function TestStr(Str: string): Boolean;
// Проверка строки на наличие коментария (ini file)
function TestCommentStr(Str: string): Boolean;
// Извлекает строку до символа #13(#10) и вырезает её из основной строки (Str)
function ExtractStr(var Str: string; AutoTrim: Boolean = False; Ex: Boolean = False): string;
// Извлекает строку до разделителя Sep и вырезает её из основной строки (Str)
function ExtractStrSep(Sep: string; var Str: string; Ex: Boolean = False): string;
// Извлекает параметр ParName из списка строк Str и помещает его в ParStr, в случае неудачи возвращает False (ini file)
function ExtractValue(Str, ParName: string; var ParStr: string): Boolean;
// Преобразует масив в виде строки в масив Delphi
function ExtractMasToStaticArray(Source: string; var Dest: array of string): Boolean;
// Преобразует масив Delphi в масив Delphi в виде строки
function InvolvingStaticArrayToMas(var Dest: string; Source: array of string): Boolean;
// Преобразует масив в виде строки в список строк разделённых #13#10
function ExtractMasToStr(Source: string; var Dest: string): Boolean;
// Преобразует список строк разделённых #13#10 в масив в виде строки
function InvolvingStrToMas(Source: string; var Dest: string): Boolean;
// Похоже на ExtractStr, но с дополнительными возможностями (ini file)
function NextInfStr(var Str, ExtStr: string; NillStop: Boolean = False): Boolean;
// Ну тут вроде так будет ясно
function ReplaceStr(FindStr, ReplStr, EventStr: string; IgnoreCase: Boolean = False): string;
// Упаковывает строку в безопасную строку (%**)
function StrPak(Str: string; CharPak: string = »; CharNoPak: string = »): string;
// Распаковывает строку из безопасной строки (%**)
function StrUnPak(Str: string): string;

// Функции для работы со списками строк
function StrAddLine(AddStr: string; var Str: string): Boolean;
function StrInsLine(AddStr: string; var Str: string; Index: Integer): Boolean;
function StrDelLine(var Str: string; Index: Integer): Boolean;
function StrMoveLine(var Str: string; FromLine, ToLine: Integer): Boolean;
function StrGetLine(Str: string; Index: Integer): string;
function StrSetLine(NewStr: string; var Str: string; Index: Integer): Boolean;
function StrFindLine(FindStr, Str: string; Start: Integer; IgnoreCase: Boolean = False): Integer;
function StrFindBeginLine(Str: string; Index: Integer; Start: Integer = 1): Integer;
function StrLenLine(Str: string; Start: Integer): Integer;
function StrCountLine(Str: string): Integer;

// Функции преоразования
function IntToHex(Value: Integer; MinDigits: Byte = 2; MaxDigits: Byte = 8): string;
function HexToInt(Value: string; Def: Integer = 0): Integer;
function HexToIntDef(Value: string; var PosErr: Integer; Def: Integer = 0): Integer;
function NextWord(var Value: string; Splin: string = #32): string;
function StrToColor(Str: string): TColor;
// Просто возвращает параметр Value
function toconst(Value: string): string;
// «Фамилию Имя Отчество» преобразует в «Фамилия И О»
function FIOToShortFIO(Value: string): string;
// Преобразует строку формата С в формат Delphi (преобразуются t r n и т.д.)
function CtoPasStr(S: PChar): string;
// Генерирует случайный пароль
function GeneratePassword(Size: Byte = 8; Chars: string = ‘abcdefghijklmonqrstuvwxyz’): string;

Группа: Пользователи
Сообщений: 156
Пол: Мужской

function ReplaceStr(FindStr, ReplStr, EventStr: string; IgnoreCase: Boolean = False): string;

Есть стандартная функция — StringReplace

function StrInsLine(AddStr: string; var Str: string; Index: Integer): Boolean;

Есть стандартная функция — Insert

function StrDelLine(var Str: string; Index: Integer): Boolean;

Есть стандартная функция — Delete

function StrFindLine(FindStr, Str: string; Start: Integer; IgnoreCase: Boolean = False): Integer;

Есть стандартные функции — Pos, AnsiPos и т.п.

function StrLenLine(Str: string; Start: Integer): Integer;
function StrCountLine(Str: string): Integer;

// Функции преоразования
function IntToHex(Value: Integer; MinDigits: Byte = 2; MaxDigits: Byte = 8): string;
function HexToInt(Value: string; Def: Integer = 0): Integer;

Есть стандартные одноимённые функции IntToHex, HexToInt

function StrToColor(Str: string): TColor;
// Просто возвращает параметр Value

А RTTI нельзя использовать?

Все всегда уезжают навсегда. Вернуться невозможно-вместо нас всегда возвращается кто-то другой

Группа: Пользователи
Сообщений: 156
Пол: Мужской

Вот некоторые стандартные функции дельфи по работе со строками:

AdjustLineBreaks function
AnsiCompareStr function
AnsiCompareText function
AnsiContainsStr function
AnsiContainsText function
AnsiDequotedStr function
AnsiEndsStr function
AnsiEndsText function
AnsiExtractQuotedStr function
AnsiIndexStr function
AnsiIndexText function
AnsiLeftStr function
AnsiLowerCase function
AnsiMatchStr function
AnsiMatchText function
AnsiMidStr function
AnsiPos function
AnsiQuotedStr function
AnsiReplaceStr function
AnsiReplaceText function
AnsiResemblesProc variable
AnsiResemblesText function
AnsiReverseString function
AnsiRightStr function
AnsiSameStr function
AnsiSameText function
AnsiStartsStr function
AnsiStartsText function
AnsiUpperCase function
CompareStr function
CompareText function
Concat function
Copy function
DecodeSoundExInt function
DecodeSoundExWord function
Delete procedure
DupeString function
Insert procedure
IsDelimiter function
LastDelimiter function
LeftBStr function
LeftStr function
Length function
LowerCase function
MidBStr function
MidStr function
NullStr constant
Pos function
PosEx function
QuotedStr function
ReverseString function
RightBStr function
RightStr function
SameText function
SetLength procedure
SetString procedure
SoundEx function
SoundExCompare function
SoundExInt function
SoundExProc function
SoundExSimilar function
SoundExWord function
Str procedure
StringOfChar function
StringReplace function
StuffString function
Trim function
TrimLeft function
TrimRight function
UpperCase function
Val procedure
WideLowerCase function
WideSameStr function
WideSameText function
WideUpperCase function
WrapText function
BinToHex procedure
BoolToStr function
FalseBoolStrs variable
HexToBin function
StrToBool function
StrToBoolDef function
StrToInt function
StrToInt64 function
StrToInt64Def function
StrToIntDef function
TrueBoolStrs variable
TryStrToBool function
TryStrToInt function
TryStrToInt64 function
MatchesMask function
AnsiStrComp
AnsiStrIComp
AnsiStrLComp
AnsiStrLIComp
StrComp
StrIComp
StrLComp
StrLIComp
AnsiStrLower
AnsiStrUpper
StrLower
StrUpper
StrCat
StrLCat
AnsiStrPos
AnsiStrScan
AnsiStrRScan
StrPos
StrScan
StrRScan
StrCopy
StrLCopy
StrECopy
StrMove
StrPCopy
StrPLCopy

В общем — читайте хэлп и исходники, иногда помогает.

Все всегда уезжают навсегда. Вернуться невозможно-вместо нас всегда возвращается кто-то другой

Группа: Администраторы
Сообщений: 803
Пол: Мужской
Реальное имя: Евгений

function ReplaceStr(FindStr, ReplStr, EventStr: string; IgnoreCase: Boolean = False): string;

Есть стандартная функция — StringReplace

function StrInsLine(AddStr: string; var Str: string; Index: Integer): Boolean;

Есть стандартная функция — Insert

function StrDelLine(var Str: string; Index: Integer): Boolean;

Есть стандартная функция — Delete

function StrFindLine(FindStr, Str: string; Start: Integer; IgnoreCase: Boolean = False): Integer;

Есть стандартные функции — Pos, AnsiPos и т.п.

// Функции преоразования
function IntToHex(Value: Integer; MinDigits: Byte = 2; MaxDigits: Byte = 8): string;
function HexToInt(Value: string; Def: Integer = 0): Integer;

Есть стандартные одноимённые функции IntToHex, HexToInt


Если программа пишется без VCL то эти функции пригодятся

function StrToColor(Str: string): TColor;
// Просто возвращает параметр Value

А RTTI нельзя использовать?

Многие написанные мною функцию имеют одноимённые функции так как многие мои функции только корректируют работу стандартных и в нутри происходит обращение к стандартным функцим. Приведу примеры:

function StrToColor(Str: string): TColor;
begin
if Str=» then
begin
Result := 0;
Exit;
end;
if Str[1]=’#’ then
Str[1] := ‘$’;
if not IdentToColor(Str, Longint(Result)) and
not IdentToColor(‘cl’+Str, Longint(Result)) then
Result := TColor(StrToInt(Str));
end;

function StrAddLine(AddStr: string; var Str: string): Boolean;
var
L: Integer;
begin
Result := Pos(#13, AddStr)=0;
if Result then
begin
L := Length(Str);
if (L>0) and (Str[L]<>#13) and ((L=1) or (Str[L]<>#10) or (Str[L-1]<>#13)) then
Str := Str+#13#10;
Str := Str+AddStr+#13#10;
end;
end;

function StrInsLine(AddStr: string; var Str: string; Index: Integer): Boolean;
var
P: Integer;
begin
P := StrFindBeginLine(Str, Index);
if P 0;
if not Result then Exit;
L := StrFindBeginLine(Str, 1, P);
if L>0 then
Delete(Str, P, L-P)
else
Setlength(Str, P-1);
Result := True;
end;

Группа: Пользователи
Сообщений: 156
Пол: Мужской

1) из описания не очень то понятно отличие от стандартных
2) Зачем использовать строки с #13#10? Для этого используют потомков TStrings, и вместо нагромождения функций, лучше было написать свой класс от TStrings со всеми нужными методами

Кстати у меня есть модуль для работы со строками примерно раз в 30 больше, прислать?

Все всегда уезжают навсегда. Вернуться невозможно-вместо нас всегда возвращается кто-то другой

Using Case Statement with String

Say i have a string

and wanted the values return in a case statement. Can this bedone? Can strings be used in a case statement like so

4 Answers 4

The Delphi Case Statement only supports ordinal types. So you cannot use strings directly.

But exist another options like

  • build a function which returns a Integer (hash) based on a string
  • using generics and anonymous methods ( A generic case for strings)
  • using a function which receive an array of strings (Making a case for Strings, the sane way)
  • and so on.

In Jcl library you have the StrIndex function StrIndex(Index, Array Of String) which works like this:

@Daniel’s answer pointed me in the right direction, but it took me a while to notice the «Jcl Library» part and the comments about the standard versions.

In [at least] XE2 and later, you can use:

This version is case-sensitive, so if the first argument was ‘SomeName’ it would take the not present in array path. Use IndexText for case-insensitive comparison.

For older Delphi versions, use AnsiIndexStr or AnsiIndexText , respectively.

Kudos to @Daniel, @The_Fox, and @afrazier for most of the components of this answer.

Работа со строками Delphi. Длина строки, поиск строки и пр. Обучающий материал

Строка – последовательность символов. В стандартных приложениях строковый тип используется очень часто. Для того, чтобы можно было работать со строковыми значениями, следует использовать определенный строковый тип или массив.

Стоит отметить тот факт, что в Delphi есть возможность присваивать строковые значения массиву. Что касается строковых типов, то самым популярным является String. В зависимости от директивы $H, которая по умолчанию всегда включена, компилятор интерпретирует string по-разному.

Например, если включить директиву, то компилятор будет интерпретировать string в качестве типа AnsiString, который представляет собой длинную строку с нулевым символом на конце.

В противном случае, тип string будет представлен как ShortString, который является короткой строкой без нулевого символа в конце. Работа со строками в Delphi требует от программиста знания определенного перечня специальных функций.

Поиск строки Delphi

В языке реализована возможность осуществлять поиск строки Delphi в строке. Для этого используется функция AnsiPos, которая возвращает позицию в строке первого вхождения. В том случае, если строка не будет найдена, то функция вернет нулевой результат ”0”.

Существует еще ряд команд, которые позволяют совершать различные манипуляции со строками. Здесь можно отметить AnsiIndexStr. Данная функция проводит сравнение строки со списком строк. В качестве результат она возвращает соответствующий индекс. Команда AnsiMatchStr вернет ”истина” в том случае, если строка будет полностью соответствовать какой-нибудь строке из заданного списка.

Выполняя поиск строки Delphi иногда нужно узнать последнюю позицию совпадения указанных символов. Для этого используется функция LastDelimiter.

Стоит отметить, что поиск строки можно выполнить и при помощи команды StrScan.

Зная данные функции, работа со строками будет выполнена намного быстрее и легче.

Перенос строки Delphi

Есть возможность управлять форматированием строк. Например, здесь можно адаптировать перенос строки Delphi как под Unix, так и под Windows.

Помимо этого, осуществить перенос строки можно благодаря функции WrapText.

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

Для того, чтобы получить длину строки Delphi, следует воспользоваться функцией Length(). Записывается она следующим образом:

Благодаря данной функции очень упрощается работа со строками.

Строку в число

Delphi позволяет преобразовывать строку в число и число в строку. Самыми часто используемыми функциями в этом случае являются:

1. IntToStr,
2. StrToInt,
3. StrToFloat,
4. FloatToStr.

Стоит отметить тот факт, что иногда без данных функций просто невозможно обойтись. Они дают возможность не целочисленные и целочисленные переменные типа Double, Integer, Real, Byte и так далее преобразовать в текст и наоборот, строку в число.

Строку в дату

Для того, чтобы преобразовать строку в дату Delphi, следует воспользоваться функцией VarToDateTime(). Для работы с датами в Делфи очень часто используется функция StrToDate(), которая преобразовывает непосредственно числа.

В последнее время помимо работы с Delphi, большой интерес вызывает администрирование linux.

Функции Delphi

Стандартные функции Delphi:

Для проведения всевозможных математических вычислений и многочисленных преобразований язык программирования Delphi содержит библиотеки стандартных процедур и функций. Давайте подробнее рассмотрим стандартные функции Delphi.

Между значением и именем функции существует зависимость. Поэтому всякая функция может быть представлена как операнд некоторого выражения (к примеру, в инструкции присваивания). Для возведения числа в n-ую степень достаточно записать

откуда ln — функция, вычисляющая натуральный логарифм числа exp(x), exp — функция, вычисляющая экспоненту в степени x, x — число, n-ую степень которого надо найти, а n — степень числа x. Каждая функция обладает следующими характеристиками: тип значений, тип параметров.

Должно существовать соответствие между типом переменной (ей присваивается определенное значение функции) и типом функции. И в то же время необходимо соответствие между типом фактического параметра данной функции (фактический параметр — это параметр, который указывается при обращении к функции) и типом формального параметра. В противном случае компилятором выводится сообщение об ошибке.

Математические функции Delphi:

Библиотеки языка Delphi включаются в себя и множество математических функций:

Величину угла при использовании тригонометрических функций необходимо выражать в радианах. Чтобы преобразовать угол из градусов в радианы, используйте следующую формулу:

где a выражает угол в градусах; 3.1415926 означает число pi. На месте константы 3.1415926 с дробной частью для достижения большей точности чаще всего пользуются стандартной именованной константой pi. Тогда выражения для угла в пересчете в радианы будет выглядеть следующим образом:

Функции преобразования Delphi:

Наиболее частое использование функций преобразования связано с инструкциями, которые обеспечивают ввод/вывод какой-либо информации. Например, для вывода значения переменной c типом real в поле вывода диалогового окна (компонент Label), нужно провести преобразование числа в строку символов, которая собственно изображает данное число. Это можно достичь, применяя функцию FloatToStr, которая заменяет значение выражения (оно указано как параметр функции) его строковым представлением.

Пример.

В приведенном примере значение переменной m будете выведено в поле Label. В таблице ниже Вам будут представлены основные функции преобразования Delphi:

Применение функций Delphi:

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

Примеры.

Структура функции Delphi

Как организована инструкция функции в языке Delphi? В любом языке программирования на первом этапе описания функции указывается ее заголовок. Далее за заголовком программист описывает раздел объявления констант const (если таковы имеются), затем занимается описанием раздела объявления типов type, далее следует раздел объявления переменных var и, наконец, раздел инструкций.

В приведенном примере в заголовке функции вначале указывается зарезервированное слово function, а следом идет имя функции. Далее в скобках программист перечисляет список параметров, и вслед за ним, используя символ «:», указывает тип значения функции. В конце каждого заголовка стоит символ «;». После заголовка следуют раздел констант, раздел типов, раздел переменных. Внутри раздела инструкций кроме констант и переменных, описанных соответственно в разделах const и var, может находится переменная result.

Когда инструкции функции завершат свое выполнение, значению переменной result присваивается значение функции. Таким образом, среди всех инструкций функций необходимое присутствие инструкции, которая бы присваивала переменной result окончательное значение функции. Обычно подобная инструкция есть последняя исполняемая инструкция функции. Представим пример функции FuntToKg, преобразующей фунты в килограммы.

Работа со строковыми типами данных в Delphi

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

Строка — это последовательность символов. В Object Pascal существует несколько строковых типов. Вот основные из них:

Для большинства целей подходит тип AnsiString (иногда называется Long String ).

Стандартные функции обработки строк:

1) Функция Length(Str: String) — возвращает длину строки (количество символов). Пример:

var
Str: String; L: Integer;
< . >
Str := ‘Hello!’ ;
L := Length(Str);

2) Функция SetLength(Str: String; NewLength: Integer) позволяет изменить длину строки. Если строка содержала большее количество символов, чем задано в функции, то «лишние» символы обрезаются. Пример:

var Str: String;
< . >
Str := ‘Hello, world!’ ;
SetLength(Str, 5);

3) Функция Pos(SubStr, Str: String) — возвращает позицию подстроки в строке. Нумерация символов начинается с единицы (1). В случае отсутствия подстроки в строке возращается 0. Пример:

var Str1, Str2: String; P: Integer;
< . >
Str1 := ‘Hi! How do you do?’ ;
Str2 := ‘do’ ;
P := Pos(Str2, Str1);

4) Функция Copy(Str: String; Start, Length: Integer) — возвращает часть строки Str, начиная с символа Start длиной Length. Ограничений на Length нет — если оно превышает количество символов от Start до конца строки, то строка будет скопирована до конца. Пример:

var Str1, Str2: String;
< . >
Str1 := ‘This is a test for Copy() function.’ ;
Str2 := Copy(Str1, 11, 4);

5) Процедура Delete(Str: String; Start, Length: Integer) — удаляет из строки Str символы, начиная с позиции Start длиной Length. Пример:

var Str1: String;
< . >
Str1 := ‘Hello, world!’ ;
Delete(Str1, 6, 7);

6) Функции UpperCase(Str: String) и LowerCase(Str: String) преобразуют строку соответственно в верхний и нижний регистры:

var Str1, Str2, Str3: String;
< . >
Str1 := ‘hELLo’ ;
Str2 := UpperCase(Str1); < Str2 = "HELLO" >
Str3 := LowerCase(Str1);

Строки можно сравнивать друг с другом стандартным способом:

var Str1, Str2, Str3: String; B1, B2: Boolean;
< . >
Str1 := ‘123’ ;
Str2 := ‘456’ ;
Str3 := ‘123’ ;
B1 := (Str1 = Str2); < B1 = False >
B2 := (Str1 = Str3);

Если строки полностью идентичны, логическое выражение станет равным True.

Дополнительные функции обработки строк:

В модуле StrUtils.pas содержатся полезные функции для обработки строковых переменных. Чтобы подключить этот модуль к программе, нужно добавить его имя ( StrUtils ) в раздел Uses .

1) PosEx(SubStr, Str: String; Offset: Integer) — функция аналогична функции Pos() , но позволяет задать отступ от начала строки для поиска. Если значение Offset задано (оно не является обязательным), то поиск начинается с символа Offset в строке. Если Offset больше длины строки Str, то функция возратит 0. Также 0 возвращается, если подстрока не найдена в строке. Пример:

uses StrUtils;
< . >
var Str1, Str2: String; P1, P2: Integer;
< . >
Str1 := ‘Hello! How do you do?’ ;
Str2 := ‘do’ ;
P1 := PosEx(Str2, Str1, 1); < P1 = 12 >
P2 := PosEx(Str2, Str1, 15);

2) Функция AnsiReplaceStr(Str, FromText, ToText: String) — производит замену выражения FromText на выражение ToText в строке Str. Поиск осуществляется с учётом регистра символов. Следует учитывать, что функция НЕ изменяет самой строки Str, а только возвращает строку с произведёнными заменами. Пример:

uses StrUtils;
< . >
var Str1, Str2, Str3, Str4: String;
< . >
Str1 := ‘ABCabcAaBbCc’ ;
Str2 := ‘abc’ ;
Str3 := ‘123’ ;
Str4 := AnsiReplaceStr(Str1, Str2, Str3);

3) Функция AnsiReplaceText(Str, FromText, ToText: String) — выполняет то же самое действие, что и AnsiReplaceStr(), но с одним исключением — замена производится без учёта регистра. Пример:

uses StrUtils;
< . >
var Str1, Str2, Str3, Str4: String;
< . >
Str1 := ‘ABCabcAaBbCc’ ;
Str2 := ‘abc’ ;
Str3 := ‘123’ ;
Str4 := AnsiReplaceText(Str1, Str2, Str3);

4) Функция DupeString(Str: String; Count: Integer) — возвращает строку, образовавшуюся из строки Str её копированием Count раз. Пример:

uses StrUtils;
< . >
var Str1, Str2: String;
< . >
Str1 := ‘123’ ;
Str2 := DupeString(Str1, 5);

5) Функции ReverseString(Str: String) и AnsiReverseString(Str: AnsiString) — инвертируют строку, т.е. располагают её символы в обратном порядке. Пример:

uses StrUtils;
< . >
var Str1: String;
< . >
Str1 := ‘0123456789’ ;
Str1 := ReverseString(Str1);

6) Функция IfThen(Value: Boolean; ATrue, AFalse: String) — возвращает строку ATrue, если Value = True и строку AFalse если Value = False. Параметр AFalse является необязательным — в случае его отсутствия возвращается пустая строка.

uses StrUtils;
< . >
var Str1, Str2: String;
< . >
Str1 := IfThen(True, ‘Yes’ ); < Str1 = "Yes" >
Str2 := IfThen(False, ‘Yes’ , ‘No’ );

Мы рассмотрели функции, позволяющие выполнять со строками практически любые манипуляции. Как правило, вместо строки с указанным типом данных, можно использовать и другой тип — всё воспринимается одинаково. Но иногда требуются преобразования. Например, многие методы компонент требуют параметр типа PChar , получить который можно из обычного типа String функцией PChar(Str: String) :

uses ShellAPI;
< . >
var FileName: String;
< . >
FileName := ‘C:\WINDOWS\notepad.exe’ ;
ShellExecute(0, ‘open’ , PChar(FileName), » , » , SW_SHOWNORMAL);

Тип Char представляет собой один-единственный символ. Работать с ним можно как и со строковым типом. Для работы с символами также существует несколько функций:

Chr(Code: Byte) — возвращает символ с указанным кодом (по стандарту ASCII):

Ord(X: Ordinal) — возвращает код указанного символа, т.е. выполняет противоположное действие функции Chr() :

var X: Integer;
< . >
X := Ord( ‘F’ );

Из строки можно получить любой её символ — следует рассматривать строку как массив. Например:

var Str, S: String; P: Char;
< . >
Str := ‘Hello!’ ;
S := Str[2]; < S = "e" >
P := Str[5];

В этой статье описаны основные приёмы работы со строковыми типами данных. Как правило, этих данных достаточно для написания любого алгоритма.

Ссылки по теме

Популярные статьи
Информационная безопасность Microsoft Офисное ПО Антивирусное ПО и защита от спама Eset Software


Бестселлеры
Курсы обучения «Atlassian JIRA — система управления проектами и задачами на предприятии»
Microsoft Office 365 для Дома 32-bit/x64. 5 ПК/Mac + 5 Планшетов + 5 Телефонов. Подписка на 1 год. Электронный ключ
Microsoft Windows 10 Профессиональная 32-bit/64-bit. Все языки. Электронный ключ
Microsoft Office для Дома и Учебы 2020. Все языки. Электронный ключ
Курс «Oracle. Программирование на SQL и PL/SQL»
Курс «Основы TOGAF® 9»
Microsoft Windows Professional 10 Sngl OLP 1 License No Level Legalization GetGenuine wCOA (FQC-09481)
Microsoft Office 365 Персональный 32-bit/x64. 1 ПК/MAC + 1 Планшет + 1 Телефон. Все языки. Подписка на 1 год. Электронный ключ
Windows Server 2020 Standard
Курс «Нотация BPMN 2.0. Ее использование для моделирования бизнес-процессов и их регламентации»
Антивирус ESET NOD32 Antivirus Business Edition
Corel CorelDRAW Home & Student Suite X8

О нас
Интернет-магазин ITShop.ru предлагает широкий спектр услуг информационных технологий и ПО.

На протяжении многих лет интернет-магазин предлагает товары и услуги, ориентированные на бизнес-пользователей и специалистов по информационным технологиям.

Хорошие отзывы постоянных клиентов и высокий уровень специалистов позволяет получить наивысший результат при совместной работе.

Илон Маск рекомендует:  Иконки веб-шрифтов альтернатива изображениям
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL