Pos — Функция Delphi


Строки Delphi

Сегодня речь пойдет о строках. Строки в Delphi, на мой взгляд не менее важны, чем числа. Если Вы решили стать программистом, то без строк никуда. Как говорится «из песни слов не выкинешь».

В этой статье мы рассмотрим то, как можно работать со строками. Изучим основные функции, разберем их на примерах. Примеры будут не сложные, но очень полезные. Также попробуем комбинировать строковые функции.

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

Разберемся теперь с функциями обработки строк:

Функция Length()

Функция Length() – возвращает количество символов в строке. Выглядит она так:

Function Length(S): Integer;

Передаем один параметр – строку, в результате получаем число символов.

В примере мы выводим сообщение с длиной строки str1.

Функция Copy()

Функция Copy() – функция возвращаем заданный отрывок строки.

function Copy ( str1 : string, Index, Count : Integer ) : string;

  • str1 – строка, из которой мы хотим извлечь часть.
  • Index – порядковый номер начального символа.
  • Count – сколько символов мы хотим извлечь.

Приведу пример и все станет на свои места

Функция Pos()

Функция Pos() – возвращает позицию одной строки в другой. Так сказать, ищет подстроку в строке. Если что-то находит, то возвращает номер символа начиная с которого началось совпадение.

function Pos ( const str2, str1 : string ) : Integer;

  • str2 – строка, которую ищем.
  • str1 – строка, в которой ищем.

Напишем пример, в котором будем искать вхождение «стр» в str1 и выведем найденное число в сообщении.

Процедура Delete()

Процедура Delete() – удаляет часть строки.

procedure Delete ( var Str1 : string; Index : Integer, Count : Integer );

  • str1 – строка из которой удаляем символы.
  • Index – позиция с которой начинаем удалять.
  • Count – сколько символов удаляем

Процедура Insert()

Процедура Insert() – вставляет одну строку в другую, начиная с указанного символа.

procedure Insert(str2: String; var Str1: String; Index: Integer);

  • str2-страка, которую вставляем.
  • str1-строка, в которую вставляем.
  • Index – позиция, с которой начнется вставка

Эти основные функции помогут сделать со строками в delphi любые манипуляции.

Pos Function

The Pos function in Delphi returns an integer specifying the position of the first occurrence of one string within another.

It’s instantiated like this:


What It Does

Pos looks for the first complete occurrence of the specified String — generally offered literally, in single quotes — in Source. The Source is usually some variable. If Pos finds the string, it returns the character position in Source of the first character in Str as an integer value, otherwise it returns 0.

The String and the Source must both be strings.

Example

In this example, the variable i will return the integer 5, because the specified string begins with the letter H, which is in the fifth position in Source.

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

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

Примеры операции со строками Delphi

1) Функция length возвращает длину указанной строки. Данная функция обладает одним параметром, который представляет собой выражение, имеющее строковый тип данных. В качестве значения функции length выступает целое число, обозначающее количество символов, входящих в состав строки.

Примеры

b:=length(‘na beregu’);

В результате выполнения этих инструкций переменная a пример значение 6, а переменная b получит значение 9. 2)

2) Процедура delete. С помощью процедуры delete можно удалить определенную часть строки. Общий вид процедуры delete выглядит следующим образом:

  • строка обозначает переменную или константу с строковым типом данных;
  • n есть номер символа, начиная с которого удаляется заданная подстрока;
  • m представляет собой длину удаляемой впоследствии подстроки.

Пример

При выполнении инструкции

переменная st примет значение-строку ‘Город’. 3)

3) Функция роs. С помощью функции pos возможно определение положения подстроки в указанной строке. Общий вид инструкции функции pos представляется так:

Илон Маск рекомендует:  jQuery перелистывание - эффект перелистывания страниц на jquery

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

Пример

При выполнении следующей инструкции:

Переменная n примет значение 2. В случае, если строка не содержит искомую подстроку, то функция pos возвращает значение 0. Приведем пример инструкции оператора while, которая позволит удалить начальные пробелы из указанной строки:

Здесь процедура delete(s, 1, 1) удаляет пробелы до тех пор, пока пробел есть начальный символ строки (то есть пока значение функции pos(‘ ‘,s) совпадает с единицей). Проверка условия length(s) > 0 применяется здесь для того, чтобы учесть возможность включения в строку только одних пробелов.

4) Функция copy выделяет фрагмент указанной строки. Общий вид инструкции функции copy представляется следующим образом:

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

Пример

При выполнении инструкции

town:=copy(s, 7, 12) ;

переменная town примет значение-строку ‘Екатеринбург‘.

Использование PosEx взамен Pos

Delphi , Синтаксис , Текст и Строки

Использование PosEx взамен Pos

Статья Использование PosEx взамен Pos раздела Синтаксис Текст и Строки может быть полезна для разработчиков на Delphi и FreePascal.

Комментарии и вопросы

:: 2015-03-09 17:01:06 :: re:Использование PosEx взамен Pos


у меня в дельфи 7 ищет как обычная Pos.
в тексте есть 2 слова ‘строка’
PosEx(‘строка’,Memo1.Text,2) и находит
только первое слово
третий параметр я так понимаю для того чтобы найти
второе вхождение

:: 2015-12-22 20:06:46 :: re:Использование PosEx взамен Pos

// поиск слова по чату
procedure TMess_form1.search_text(ss: string; pos_s:integer=1);
var
Find: string;
I: integer;
begin
Find := AnsiLowerCase(ss);
for I := 0 to Memo2.Lines.Count — 1 do
if PosEx(AnsiLowerCase(Find), AnsiLowerCase(Memo2.Lines.Text),pos_s) 0 then
begin
Memo2.SetFocus();
Memo2.SelStart := PosEx(AnsiLowerCase(Find), AnsiLowerCase(Memo2.Lines.Text),pos_s)-1;
Memo2.SelLength := length(Find);

end;
end;
// поиск кнопка
procedure TMess_form1.Button6Click(Sender: TObject);
var ii:integer;
begin
ii:=Memo2.SelStart + Memo2.SelLength+1;
Memo2.SelStart := 0;
Memo2.SelLength :=0;

:: 2020-01-02 10:26:17 :: re:Использование PosEx взамен Pos

Ничего не понял.
Как сделать чтоб искалка искала слово — а, слово — но, или слово-предлог — в?
А не букву а, букву в, сочетание но. итд.

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

Функция Pos

Доброго времени суток.

Delphi 2009.
Ещё вопросик. Функция StrPos возвращает указатель на первое найденное значение, а как получить не указатель, а число, например такая-то буква встречается на 5 позиции. Или как перевести указатель в число.

Функция Pos как уже было сказано возвращает именно целочисленное значение. Если не найдено то 0.

showmessage(pos); конечно будет ошибка, так как ShowMessage требует в качестве параметра строку, нужно число преобразовать в строку, воспользовавшись например функцией IntToStr();

Ёсмаё вот ты запудрил всем голову)))

у тебя код типа

Если так то она возращет строку а не указатель и тогда функция ShowMessage уместна.

А тебе нужно вернуть позицию какого-либо символа в строке или что?

Функция Pos( :String, :String):Integer;
Надеюсь достаточнО?
— подстрока в строке .
Переведу на литературный язык:

Дана строка S имеет значение ‘Привет’.
Разобъём её на массив.
S[0] — П
S[1] — р
S[2] — и
S[3] — в
S[4] — е
S[5] — т
Функция Pos ищет в элементах массива подстроку , при успешном поиске, вернёт индекс элемента массива S, который совпадает с первым символом в подстроке , в случае неуспешного поиска вернёт число 0.

Канал в Telegram

Вы здесь

PosEx (функция)

procedure TForm1.Button1Click(Sender: TObject);
const str= ‘Эта_веселая_жизнь!’ ;
var sMsg:string;
sPos:integer; //начальная позиция
begin
sPos:=1;
sMsg:= » ; //интересное наблюдение. Без этой строки антивирус Dr.Web ругался на якобы вирус :)
repeat
sPos:=PosEx( ‘_’ ,str,sPos);
if sPos<>0 then
begin
sMsg:=sMsg + inttostr(sPos)+ ‘, ‘ ; //заносим найденные позиции
inc(sPos); //смещаем позицию просмотра на +1. Функция inc аналогична записи sPos:=sPos+1
end;
until sPos=0; //вертим цикл пока sPos не станет равным 0

//формируем сообщение
if length(sMsg)=0 then //если длина строки нулевая, то значит ничего не нашли
sMsg:= ‘Символа «_» в строке [‘ +str+ ‘] нет!’
else
begin
//удаляем из строки sMsg два последних символа «, «
//побочный эффект перечисления
delete(sMsg,length(sMsg)-1,2);
sMsg:= ‘Символ «_» в строке [‘ +str+ ‘] встречается на следующих позициях: ‘ +sMsg;
end;

Pos — Функция Delphi

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

  • числовой формат, целый и дробный с плавающей точкой;
  • формат времени, даты, даты-времени;
  • преобразование символов к верхнему или нижнему регистру;
  • сравнение строк, поиск в строке и копирование подстроки;
    и многие другие.
Илон Маск рекомендует:  Что такое код hw_api &#62;unlock

Непосредственно сами строки Delphi поддерживают единственную операцию, так называемую операцию конкатенации, то есть присоединения. Несмотря на «научное» название, операция конкатенации выполняет очень простую процедуру. С помощью операции конкатенации одна строка присоединяется к другой:

Результирующая строка 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
функция AnsiCompareText(const S1, S2: String): Integer
Сравнивает две строки 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); //после запятой — длинная последовательность цифр
//DecimalSeparator — константа, содержащая истинный разделитель целой и дробной частей числа N:=Pos(DecimalSeparator, S); //позиция запятой в строке
//вычисляем длину строки с нужным количеством знаков после запятой:
if N=0 //если в строке нет запятой — это целое число, и
then N:=Length(S) //тогда просто выводим это число
else N:=N+Count; //иначе вычисляем длину строки
Result:=Copy(S, 1, N); //копируем часть строки в результат
end;

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

Pos — Функция Delphi

В Delphi 7 в модуле StrUtils внесены некоторые изменения.

Есть новая функция: PosEx.

Обьявление этих функций:

Function Pos(Substr: String ; S: String ): Integer;

Function PosEx( Const SubStr, S: String ; Offset: Cardinal = 1 ): Integer;

Новая функция PosEx, позволяет указать начальную позицию поиска внутри строки, что избавит вас от необходимости изменения исходной строки. Незабудьте указать модуль StrUtils.

Ниже приведена реализация функции в модуле StrUtils (если вы используете более старшую версию среди разработки вы сможете сами добавить этот код и использовать его вместо функции Pos):

Function PosEx( Const SubStr, S: String ; Offset: Cardinal = 1 ): Integer;

Len, LenSubStr: Integer;

If Offset = 1 Then

Result := Pos(SubStr, S)

Len := Length(S) — LenSubStr + 1 ;

If S[I] = SubStr[ 1 ] Then

While (X And (S[I + X] = SubStr[X + 1 ]) Do

Pos — Функция Delphi

Решил я попробовать FireMonkey (Delphi XE3) и начал писать простенькую программку, столкнулся с такой проблемой, что не понятно почему функция Pos не видит в строке «I» из 1/2 І р.
причем AnsiPos(«1/2 «, Razrad) отрабатывает нормально.
Может кто видит, где я ошибся?
ConvertRazradToStandartFormat(«1/2 І р.»);
ConvertRazradToStandartFormat(«ІІ р. «);

function TRazradSyncGUIForm.ConvertRazradToStandartFormat(
Razrad: string): string;
var
sv: string;
IsJunior: Boolean;
st2: Integer;
begin
sv := «-«;
// Razrad := AnsiUpperCase(Razrad);
st2 := AnsiPos(«I», Razrad);
// Delete(Razrad, AnsiPos(«1/2 «, Razrad), Length(«1/2 «) );
// Delete(Razrad, AnsiPos(«1/2», Razrad), Length(«1/2») );
// Razrad := StringReplace(Razrad, «3», «III», [rfReplaceAll, rfIgnoreCase]);
// Razrad := StringReplace(Razrad, «2», «II», [rfReplaceAll, rfIgnoreCase]);
// Razrad := StringReplace(Razrad, «1», «I», [rfReplaceAll, rfIgnoreCase]);
// IsJunior := (AnsiPos(«юн», Razrad) <> 0) or (AnsiPos(«ю», Razrad) <> 0);
// if IsJunior
// then begin
// if AnsiPos(«III», Razrad) <> 0
// then sv := TEXT_III_JUNIOR
// else if AnsiPos(«II», Razrad) <> 0
// then sv := TEXT_II_JUNIOR
// else if AnsiPos(«I», Razrad) <> 0
// then sv := TEXT_I_JUNIOR;
// end;
// if not IsJunior
// then begin
// if AnsiPos(«III», Razrad) <> 0
// then sv := TEXT_III
// else if (AnsiPos(«II», Razrad) <> 0)
// then sv := TEXT_II
// else if AnsiPos(«I», Razrad) <> 0
// then sv := TEXT_I;
// if AnsiPos(«КМС», Razrad) <> 0
// then sv := TEXT_KMS;
// end;
//
// sv := Trim(sv);
Result := sv;
end;

st2 выдает 0, а вроде как должно 1

В этой строке кириллическая І, а не латинская I.

Функция Pos в Delphi

function Pos(Substr: string; S: string): Integer;DescriptionIn Delphi, Pos searches for a substring, Substr, in a string, S. Substr and S are string-type expressions.Pos searches for Substr within S and returns an integer value that is the index of the first character of Substr within S. Pos is case-sensitive. If Substr is not found, Pos returns zero.

пробовал сделать так же если нету то очистить, вообщем не работает(

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL