Delphi-Help

  • Увеличить размер шрифта
  • Default font size
  • Уменьшить размер шрифта

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

Оценить
(0 голоса)

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

Функция заменяет в строке Str все подстроки '%1', '%2', и т.д. На соответствующие значения из массива Values. При этом значения этого массива не должны содержать подстановочных подстрок, в противном случае возможно зависание функции. Эта функция работает неверно, если в строке, на которую надо заменить %1,%2,… содержится одна из строк %1,%2,…

function FmtString(const Str: string; const Values: array of string): string;
 
  function InternalPos(SubStr: string; Str: PChar; out P: Integer): Integer;
  var
    Ptr: PChar;
  begin
    Ptr := StrPos(Str, PChar(SubStr));
    if Ptr = nil then
      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) >= 0 do
    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', ['Пример', 'использования']);
Login to post comments

Счетчики