Неверов Евгений Викторович
QR-код
Меню сайта
Категории раздела
Программирование на языке Паскаль [25]
В данной категории представлены новые функции, созданные на языке Паскаль, которые могут пригодиться при написании своих программ
Программирование на Delphi [19]
В данной категории представлены полезные подпрограммы, которые могут пригодиться при написании своих программ, а также рассматриваются примеры готовых проектов, создаваемых в среде программирования Delphi
Программирование на HTML [1]
В данной категории рассматриваются примеры готовых проектов, создаваемых на языке HTML
Мои программы [1]
Описание разработанных автором программ.
Online-программы [2]
Прочее [42]
Свободная тематика
Мини-чат
200
Наш опрос
Есть ли цивилизации во Вселенной?
Всего ответов: 15
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Замена символа или фразы в строке на новое значение

Функция StringReplace возвращает строку, полученную из строки S заменой в ней подстроки OldPattern на подстроку NewPattern. Если в параметр Flags включено значение rfReplaceAll, то функция заменяет все подстроки OldPattern входящие в строку S, иначе заменяется только первое вхождение подстроки. Для того чтобы функция проводила замену без учета регистра, необходимо в параметр Flags включить значение rfIgnoreCase.

function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;

где:

  • S – исходная строка;
  • OldPattern – "старая" подстрока;
  • NewPattern – "новая" подстрока;
  • Flags – переменная, задаваемая в квадратных скобках следующие значения множества:
    • rfReplaceAll – заменяет все вхождения;
    • rfIgnoreCase – игнорирует регистр при поиске.

Например,

  • StringReplace('Блогер Ломает слоги', 'ло', 'ени', []) выведет 'Бенигер Ломает слоги';
  • StringReplace('Блогер Ломает слоги', 'ло', 'ени', [rfReplaceAll]) выведет 'Бенигер Ломает сениги';
  • StringReplace('Блогер Ломает слоги', 'ло', 'ени', [rfReplaceAll, rfIgnoreCase]) выведет 'Бенигер енимает сениги';
  • StringReplace('Блогер Ломает слоги', 'ло', 'еНи', [rfReplaceAll, rfIgnoreCase]) выведет 'БеНигер еНимает сеНиги'.

Примечание. Последние примеры показывают, что фраза не зависит от регистра переменной NewPattern. Поэтому мы пишем свою собственную функцию:

function StringReplaceNew(s, OldPattern, NewPattern: string; RegOld, RegNew: boolean): string;
var str, patt, sc, np: string;
    len, p: integer;
begin
   if RegOld then
   begin
      str:=s;
      patt:=OldPattern;
   end else
   begin
      str:=AnsiLowerCase(s);
      patt:=AnsiLowerCase(OldPattern);
   end;
   Result:='';
   len:=Length(OldPattern);
   while str<>'' do
   begin
      p:=Pos(patt, str);
      if p=0 then
      begin
         Result:=Result+s;
         Break;
      end;
      Result:=Result+Copy(s, 1, p-1);
      sc:=Copy(s, p, len);
      np:=NewPattern;
      if not RegNew then
         if RegOld then
         begin
            if RegistrStringUpper(sc) and RegistrStringUpper(OldPattern) then
               np:=AnsiUpperCase(NewPattern);
            if not RegistrStringUpper(sc) and not RegistrStringUpper(OldPattern) then
               np:=AnsiLowerCase(NewPattern);
         end else
         begin
            if RegistrStringUpper(sc) then
               np:=AnsiUpperCase(NewPattern) else
               np:=AnsiLowerCase(NewPattern);
         end;
      Result:=Result+np;
      s:=Copy(s, p+len, Length(s));
      str:=Copy(str, p+len, Length(str));
   end;
end;

где:

  • s – исходная строка;
  • OldPattern – "старая" подстрока;
  • NewPattern – "новая" подстрока;
  • RegOld – соблюдение регистра "старой" подстроки;
  • RegNew – соблюдение регистра "новой" подстроки.

Например,

  • StringReplaceNew('Блогер Ломает слоги', 'ло', 'еНи', false, false выведет 'Бенигер ЕНИмает сениги';
  • StringReplaceNew('Блогер Ломает слоги', 'ло', 'еНи', false, true) выведет 'БеНигер еНимает сеНиги';
  • StringReplaceNew('Блогер Ломает слоги', 'ло', 'еНи', true, false) выведет 'Бенигер Ломает сениги';
  • StringReplaceNew('Блогер Ломает слоги', 'ло', 'еНи', true, true) выведет 'БеНигер Ломает сеНиги';
  • StringReplaceNew('Программист', 'М', 'Н', false, true) выведет 'ПрограННист';
  • StringReplaceNew('барабАн', 'ба', 'ле', true, false) выведет 'лерабАн';
  • StringReplaceNew('Информатика', 'и', 'Е', true, false) выведет 'Информатека'.

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

Примечание. Для полноценной работы данной функции необходимо скопировать вспомогательные функции из раздела "Операции с регистрами":

function RegistrCharUpper(c: char): boolean;
function RegistrStringUpper(s: string): boolean;
Категория: Программирование на языке Паскаль | Добавил: newerow1989 (12.03.2016)
Просмотров: 909 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email:
Код *:
Вход на сайт
Поиск
Друзья сайта
Заработок в Интернете
Для начала необходим Электронный PAYEER® кошелек!
Copyright MyCorp © 2025
Версия для мобильных устройств. Яндекс.Метрика Анализ сайта Проверить мой сайт на ScamAdviser.com