我曾经使用下列代码在内存中搜索word中的中文字符,替换应该也差不多:
.................
stContext:=keyADO.CreateBlobStream(keyADO.FieldByName('Content'),bmRead);
stContext.Position:=0;
SetLength(S,stContext.size);
stContext.Read(S[0],stContext.size);
if Pos(keystr,Widestring(S))>0 then
........................
function CheckData(lpData,szData:PChar):Boolean;
var
Size,s,l:Integer;
begin
Result:=False;
Size:=lstrlen(szData);
l:=1;
for s:=1 to Size do
begin
if lpData ^ = szData^ then ……
[/Quote]
function CheckData(lpData,szData:PChar):Boolean;
var
Size,s,l:Integer;
begin
Result:=False;
Size:=lstrlen(szData);
l:=1;
for s:=1 to Size do
begin
if lpData ^ = szData^ then Inc(l)
else
Break;
Inc(lpData);
Inc(szData);
end;
if l = Size then Result:=True;
Dec(szData,l);
end;
function ReplaceData(lpData,szData:PChar):Integer;
var
Size,l:Integer;
begin
Result:=0;
if CheckData(lpData,szData) then
begin
Size:=lstrlen(szData);
for l:=1 to Size do
begin
lpData^:=szData^;
Inc(lpData);
Inc(szData);
end;
Result:=Size;
end;
end;
procedure ReplaceMem(lpData:Pointer;Size:Integer;szData:Pointer);
var
l:Integer;
begin
while Size > 1 do
begin
if PChar(lpData)^ = PChar(szData)^ then
begin
l:=ReplaceData(lpData,szData);
end
else
Inc(PChar(lpData),l);
end;
end;