1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| function WidePos(const SubStr, S: WideString): Integer;
var
I,X: Integer;
Len, LenSubStr: Integer;
begin
I := 1;
LenSubStr := Length(SubStr);
Len := Length(S) - LenSubStr + 1;
while I <= Len do
begin
if S[I] = SubStr[1] then
begin
X := 1;
while (X < LenSubStr) and (S[I + X] = SubStr[X + 1]) do
Inc(X);
if (X = LenSubStr) then
begin
Result := I;
exit;
end;
end;
Inc(I);
end;
Result := 0;
end;
function WCopy(const S : WideString;index : Integer; Count : Integer):WideString;
var
R : widestring;
begin
SetLength(R,Count);
CopyMemory(PWideChar(R),PWideChar(S)+Index-1,Count*2);
Result := R;
end;
function WideStringReplace(const S, OldPattern, NewPattern: WideString;
Flags: TReplaceFlags): WideString;
var
SearchStr, Patt, NewStr: WideString;
Offset: Integer;
begin
if rfIgnoreCase in Flags then
begin
SearchStr := WideUpperCase(S);
Patt := WideUpperCase(OldPattern);
end else
begin
SearchStr := S;
Patt := OldPattern;
end;
NewStr := S;
Result := '';
while SearchStr <> '' do
begin
Offset := WidePos(Patt, SearchStr);
if Offset = 0 then
begin
Result := Result + NewStr;
Break;
end;
Result := Result + WCopy(NewStr, 1, Offset - 1) + NewPattern;
NewStr := WCopy(NewStr, Offset + Length(OldPattern), Length(S)-Offset-Length(OldPattern)+1);
if not (rfReplaceAll in Flags) then
begin
Result := Result + NewStr;
Break;
end;
SearchStr := WCopy(SearchStr, Offset + Length(Patt), Length(S)-Offset-Length(OldPattern)+1);
end;
end; |
Partager