| 
  Функция 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;
  
		
	 
 
  |