REVELAR

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...

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

Salsa

Responder

Posts

09/02/2006

Salsa

ninguem tem ideia pra uma melhora disso?

:P


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar