RSS

PosEx (функция)

Функция PosEx – аналогична функции Pos и является ее расширением. Отличием от функции Pos является дополнительный параметр – номер символа, с которого начинается просмотр текста. Функция PosEx входит в состав библиотеки StrUtils и имеет три входных параметра — текстовую строку, в которой ищем, что ищем и откуда начинаем искать.

 
Синтаксис функции:  PosEx(const SubStr, S: string; Offset: Cardinal = 1): Integer;
где:
Substr – искомая подстрока, символ или набор символов;
S – строка, в которой ищем Substr;
Offset – номер символа в строке S с которого начинаем просмотр и поиск. По умолчанию значение равно 1.
 

Пример. Найдем в строке «Эта_веселая_жизнь!» все позиции символа «_». Просмотр начинаем с первого символа и далее, для продвижения вперед, будем смещать начальную позицию. Не забудьте в разделе Uses дописать библиотеку StrUtils, иначе Delphi выдаст ошибку «Undeclared identifier: ‘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;

ShowMessage(sMsg);

end;

 

Внимание! Функция PosEx так же, как и функция Pos, чувствительна к регистру. Если при поиске нет необходимости учитывать регистр, тогда переведите  входные параметры Substr и S в один регистр функцией LowerCase или UpperCase.