Недавно добавленные исходники

•  Animation Loaders  735

•  DeLiKaTeS Tetris (Тетрис)  5 726

•  TDictionary Custom Sort  7 685

•  Fast Watermark Sources  7 368

•  3D Designer  10 584

•  Sik Screen Capture  7 896

•  Patch Maker  8 122

•  Айболит (remote control)  8 177

•  ListBox Drag & Drop  6 971

•  Доска для игры Реверси  100 239

•  Графические эффекты  8 252

•  Рисование по маске  7 634

•  Перетаскивание изображений  6 232

•  Canvas Drawing  6 600

•  Рисование Луны  6 529

•  Поворот изображения  5 695

•  Рисование стержней  4 623

•  Paint on Shape  3 329

•  Генератор кроссвордов  4 307

•  Головоломка Paletto  3 453

•  Теорема Монжа об окружностях  4 270

•  Пазл Numbrix  2 767

•  Заборы и коммивояжеры  3 676

•  Игра HIP  2 483

•  Игра Go (Го)  2 469

•  Симулятор лифта  2 870

•  Программа укладки плитки  2 305

•  Генератор лабиринта  3 034

•  Проверка числового ввода  2 531

•  HEX View  2 945

 
скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

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



{ **** 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', ['Пример', 'использования']);







Copyright © 2004-2026 "Delphi Sources" by «SiteAnalyzer». Delphi World FAQ

Группа ВКонтакте