Ищем позицию заданной подстроки в строке, с указанием, каким по счету должен быть найденный образец, если он встречается в строке несколько раз. Функция чувствительна к регистру символов.
1 2 3 4 5 6 7 8 9 |
var sourceString, findStr: string; position: integer; begin sourceString:= 'text_text_text'; findStr:= '_'; position:= searchPosString(findStr, sourceString, 2); ShowMessage(IntToStr(position)); end; |
Параметры
sourceString - строка в которой ищем
findStr - подстрока которую ищем
Результат
Позиция искомой подстроки в случае соответствия заданным параметрам. Или (0), если указанный номер вхождения не существует или подстрока не найдена вообще.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
function searchPosString(const findStr, sourceString: string; num: Integer): Integer; var firstSym: PChar; function myPos(const FindStr, SourceString: PChar; num: Integer): PChar; begin Result := AnsiStrPos(SourceString, FindStr); if (Result = nil) then Exit; Inc(Result); if num = 1 then Exit; if num > 1 then Result := myPos(FindStr, Result, num - 1); end; begin firstSym := PChar(SourceString); Result := myPos(PChar(FindStr), PChar(SourceString), num) - firstSym; if Result < 0 then Result := 0; end; |