Fórum substituindo palavras de frases muito grandes #312274
08/02/2006
0
Seguinte, eu tenho uma coluna de uma tabela chamada keywords...
nela tenho varias palavras ex...
* cada registro dessa coluna tem +/- uns 2000 caracteres.
* e sao +/- uns 2000 registros.
tenho tb 2 StringList com as palavras de um dicionario que deve ser substituido ..
bom ateh ae tudo bem... eu preciso fazer o seguinte...
quero percorrer todas as palavras de um registro e verificar se tem no dicionario para entao substituir as palavras....
eu até consegui fazer, porem é um processo meio demorado e que tb infelizmente nao tratou todas as palavras do dicionario...
algumas palavras q estao nos registros nao foram substituidas....
eu fiz assim... tenho 2 funçoes...
e aqui eu vou percorrendo todas as palavras do campo q eu quero e verificando se ela esta no dicionario da StringList...
alguem sabe como posso melhorar essa performance e pq ele pulou algumas palavras?
nela tenho varias palavras ex...
casa cavalo joao armario revista delphi .....
* cada registro dessa coluna tem +/- uns 2000 caracteres.
* e sao +/- uns 2000 registros.
tenho tb 2 StringList com as palavras de um dicionario que deve ser substituido ..
bom ateh ae tudo bem... eu preciso fazer o seguinte...
quero percorrer todas as palavras de um registro e verificar se tem no dicionario para entao substituir as palavras....
eu até consegui fazer, porem é um processo meio demorado e que tb infelizmente nao tratou todas as palavras do dicionario...
algumas palavras q estao nos registros nao foram substituidas....
eu fiz assim... tenho 2 funçoes...
{substitui uma palavra por outra}
function ReplaceStr (Text,oldstring,newstring:string): string;
var atual, strtofind, originalstr: pchar;
NewText:string;
lenoldstring,lennewstring,m,index: integer;
begin
NewText := Text;
originalstr := PChar(Text);
strtofind := PChar(oldstring);
lenoldstring := length(oldstring);
lennewstring := length(newstring);
Atual := StrPos(OriginalStr,StrtoFind);
index := 0;
while Atual <> nil do begin
m := Atual - OriginalStr - index + 1;
Delete(NewText,m,lenoldstring);
Insert(newstring,NewText,m);
inc(index,lenoldstring-lennewstring);
Atual := StrPos(Atual+lenoldstring,StrtoFind);
end;
Result := NewText;
end;
{pega a posicao de uma palavra}
function gettok(Texto: string; Posicao, Caractere: Integer): string;
var
i:integer;
ii:integer;
TextoF:string;
begin
i:=1;
ii:=1;
TextoF := ´´;
if Ord(Texto[1]) <> Caractere then Texto:=chr(Caractere)+Texto;
if Ord(Texto[Length(Texto)]) <> Caractere then Texto:=Texto+chr(Caractere);
while i < Length(Texto) do
begin
inc(i);
if ii = Posicao then TextoF:=TextoF + Texto[i];
if Ord(Texto[i]) = Caractere then inc(ii);
end;
if (Posicao <> 0) then Result:=copy(TextoF,1,length(TextoF)-1)
else Result:=IntToStr(ii-1);
end;
e aqui eu vou percorrendo todas as palavras do campo q eu quero e verificando se ela esta no dicionario da StringList...
x := RegistroDaColuna
{substituicao das palavras do dicionario}
for c := 0 to DicionarioEN.Count - 1 do
{pega quantas palavras tem no registro da coluna usando gettok 0}
for d := 0 to StrToInt(gettok(x,0,32)) do
if DicionarioEN.Strings[c] = gettok(x,d,32) then
x := ReplaceStr(x,DicionarioEN.Strings[c],DicionarioENsubs.Strings[c]);
alguem sabe como posso melhorar essa performance e pq ele pulou algumas palavras?
Salsa
Curtir tópico
+ 0
Responder
Posts
09/02/2006
Salsa
ninguem tem ideia pra uma melhora disso?
:P
:P
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)