Функция 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.