Показать сообщение отдельно
  #18  
Старый 29.04.2014, 13:31
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Действительно, был не прав по поводу родного StringReplace. Посмотрел исходный код сей функции. У нас с авторами видимо разное представление о флаге rfReplaceAll. Вот первый вариант улучшенной функции StringReplace. Есть в ней один косяк при включенном флаге rfIgnoreCase, тут надо подумать. Но во всем остальном вроде нормально пашет. Если есть замечания, то выкладывайте свой вариант. Будем совместно править косяк Embarcadero
Код:
function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;
Var LS, RS, Pattern: String;
begin
 Result := S;
 Pattern := OldPattern;
 if rfIgnoreCase in Flags
 then begin
      Result := AnsiUpperCase(S);
      Pattern := AnsiUpperCase(OldPattern);
      end;
 while Pos(Pattern, Result) <> 0
 do begin
    LS := Copy(Result, 1, Pos(Pattern, Result)-1);
    RS := Copy(Result, Pos(Pattern, Result) + Length(Pattern), Length(Result));
    Result := LS + NewPattern + RS;
    if not (rfReplaceAll in Flags) then Break;
    if Result = S then Break;
    end;
end;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием