|
Функция Pos возвращает индекс первого вхождения фрагмента
Substr в строке S или ноль, если Substr нигде в
S не встречается.
function Pos(Substr: string; S: string): Integer;
где:
Substr – фрагмент строки;
S – исходная строка.
Например,
Pos('во', 'руководство') выведет
'5';
Pos('ток', 'информатика') выведет
'0' (нет такого фрагмента).
Чтобы найти индекс не только первого вхождения фрагмента, потребуется своя функция
PosNext, которая осуществляет поиск с позиции Offset.
function PosNext(Substr, S: string; Offset: integer; Reg: boolean): integer;
var i, len: integer;
begin
Result:=0;
if Substr='' then
Exit;
if Offset<1 then
Offset:=1;
if not Reg then
begin
Substr:=AnsiLowerCase(Substr);
S:=AnsiLowerCase(S);
end;
len:=Length(Substr);
for i:=Offset to Length(S)-len+1 do
if Copy(S, i, len)=Substr then
begin
Result:=i;
Exit;
end;
end;
где:
Substr – фрагмент строки;
S – исходная строка;
Offset – начальный индекс;
Reg – соблюдение регистра.
Например,
PosNext('Ба', 'У нас барабан. Барабан большой', 7, false)
выведет '7' (фрагменты
'ба', независимо от регистра букв, располагаются на
позициях 7, 11, 16 и 20);
PosNext('Ба', 'У нас барабан. Барабан большой', 7, true)
выведет '16' (найден с большой буквы
'Б');
PosNext('Ба', 'У нас барабан. Барабан большой', 8, false)
выведет '11' (поскольку мы S задали с 8,
функция нашла второй фрагмент);
PosNext('й', 'У нас барабан. Барабан большой', 100, false)
выведет '0' (поскольку мы S задали
намного больше длины самой исходной строки, функция вернула нулевое значение);
PosNext('Б', 'У нас барабан. Барабан большой', 18, true)
выведет '0' (во фрагменте
'рабан большой' нет больше заглавной буквы
'Б').
Примечание. В современных версиях Delphi имеется
встроенная функция PosEx из модуля StrUtils. Она выполняет ту
же задачу, что и PosNext, но только с учетом регистра (нет 4-го
параметра):
function PosEx(const SubStr, S: string; Offset: Integer): Integer;
|