Code:

{ **** UBPFD *********** by delphibase .endimus. com ****

>> Форматирование строки с использованием подстановочных символов %1, %2 и т.д.

 

Функция заменяет в строке Str все подстроки '%1', '%2', и т.д. На

соответсвующие значения из массива Values. При этом значения этого массива

не должны содержать подстановочных подстрок, в противном случае возможно

зависание функции.

 

Зависимости: SysUtils

Автор: Dimka Maslov, mainbox @ endimus.ru, ICQ:148442121, Санкт-Петербург

Copyright: Dimka Maslov

***************************************************** }

 

{Эта функция работает неверно, если в строке, на которую надо

заменить %1,%2,… содержится одна из строк %1,%2,…

( она зависнет в бесконечном цикле )}

 

function FmtString(const Str: string; const Values: arrayofstring): string;

 

function InternalPos(SubStr: string; Str: PChar; out P: Integer): Integer;

var

Ptr: PChar;

begin

Ptr := StrPos(Str, PChar(SubStr));

if Ptr = nilthen

Result := -1

else

Result := Integer(Ptr) - Integer(Str);

P := Result;

end;

 

function InternalReplace(const Str, OldSub, NewSub: string): string;

var

PrePos: Integer;

CurPos: Integer;

OldLen, NewLen: Integer;

begin

PrePos := 1;

Result := Str;

OldLen := Length(OldSub);

NewLen := Length(NewSub);

while InternalPos(OldSub, @Result[PrePos], CurPos) >= 0do

begin

Inc(PrePos, CurPos);

Delete(Result, PrePos, OldLen);

Insert(NewSub, Result, PrePos);

Inc(PrePos, NewLen);

end;

end;

 

var

i: Integer;

begin

Result := Str;

for i := High(Values) downto Low(Values) do

Result := InternalReplace(Result, '%' + IntToStr(i + 1), Values[i]);

end;

Пример использования:

 

FmtString('%1 %2', ['Пример', 'использования']);

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить