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', ['Пример', 'использования']); |
Форматирование строки с использованием подстановочных символов
- Подробности
- Родительская категория: Работа со строками
- Категория: Форматирование строк
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!