Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

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

Delphi , Синтаксис , Текст и Строки



Автор: Dimka Maslov
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Форматирование строки с использованием подстановочных символов %1, %2 и т.д.

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

Зависимости: SysUtils
Автор:       Dimka Maslov, mainbox@endimus.ru, ICQ:148442121, Санкт-Петербург
Copyright:   Dimka Maslov
Дата:        15 мая 2002 г.
***************************************************** }

{Эта функция работает неверно, если в строке, на которую надо
заменить %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', ['Пример', 'использования']);

Вот перевод текста на русский язык:

Это функция Delphi, называемая FmtString, которая форматирует строку с помощью placeholder %1, %2 и т.д., и заменяет их соответствующими значениями из массива строк.

Функция использует два вспомогательных функции: InternalPos для поиска позиции подстроки в строке, и InternalReplace для замены всех вхождений подстроки на другую подстроку.

Разбивка:

  • Функция InternalPos принимает три параметра: SubStr, Str и P. Она возвращает позицию SubStr в строке Str как целое число. Если SubStr не найдена, она возвращает -1.
  • Функция InternalReplace принимает три параметра: Str, OldSub и NewSub. Она заменяет все вхождения OldSub на NewSub в строке Str. Она использует цикл для поиска всех вхождений OldSub, удаляет их из Str, и вставляет NewSub в те позиции.
  • Основная функция, FmtString, принимает два параметра: Str (входная строка) и Values (массив строк). Она инициализирует результат как входную строку, затем циклично проходит по значениям в массиве. Для каждого значения она вызывает InternalReplace для замены всех вхождений %N (где N - индекс значения плюс 1) соответствующим значением из массива.

Пример использования функции: FmtString('%1 %2', ['Пример', 'использования']). Это заменит %1 и %2 в входной строке на 'Пример' и 'использование', соответственно, получив форматированную строку.

Обратите внимание:

  • Код предполагает, что значения в массиве не содержат никаких placeholder-строк (%1, %2 и т.д.). Если это не так, функция может заходить в бесконечный цикл.
  • Код плохо обрабатывает ошибки. Например, если Str равен nil, функция вызовет runtime-ошибку при попытке доступа к ее длине.

В целом, это базовая реализация форматирования строк с помощью placeholder. Она может быть улучшена добавлением дополнительных функций (например, обработкой экранированных символов, поддержкой нескольких форматов) и проверок на ошибки.

В статье описана функция FmtString для форматирования строки с использованием подстановочных символов %1, %2 и т.д., заменяющих соответствующие значения из массива Values.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Текст и Строки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-04-04 05:43:00/0.0074820518493652/1