![]() |
|
#18
|
||||
|
||||
![]() Действительно, был не прав по поводу родного 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; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |