Número da Linha de um Memo depois de localizar uma palavra.

16/03/2007

0

Boa Tarde!

Tenho um memo...

nele eu coloquei um resultado de uma pesquisa no sql server

irão ter varias linhas neste memo...

o q eu quero é:

Localizar a palavra ´objetivo´ dentro do memo e eu ler a linha que ele está pra poder colocar em um list view... (Somente a linha que tem o objetivo)...

Alguma forma???

Desde já agradeço.


Diegus

Diegus

Responder

Posts

17/03/2007

Marco Salles

acho que funfa:

memo1.Lines.IndexOf(´Objetivo´)



Responder

17/03/2007

Marco Salles

acho que funfa: Citação: memo1.Lines.IndexOf(´Objetivo´)


Desculpa , eu entendi errado... A palavra Objetivo faz parte de um contexto , e não é uma palavra isolada..

Eu não conheço nenhm método da VCL que retorne isso .. Nen mesmo nenhuma propriedade do FindDialog , a não ser fazer esta busca na mão e trazer o resultado ...


Responder

17/03/2007

Diegus

[quote:040d3de5af=´Marco Salles´]
acho que funfa: Citação: memo1.Lines.IndexOf(´Objetivo´)


Desculpa , eu entendi errado... A palavra Objetivo faz parte de um contexto , e não é uma palavra isolada..

Eu não conheço nenhm método da VCL que retorne isso .. Nen mesmo nenhuma propriedade do FindDialog , a não ser fazer esta busca na mão e trazer o resultado ...[/quote:040d3de5af]

´Objetivo´ é uma das palavras dentro do texto....


Responder

17/03/2007

Micheus

[b:a25256e940]Diegus[/b:a25256e940], veja se esta alternativa lhe serve.

- Troque seu componente TMemo por um TRichEdit;
- Defina a propriedade PlainText = False (caso julgue necessário mantê-lo o mais parecido com um TMemo);
- Após colocado o resultado dentro do RichEdit, para localizar, utilize algo como:
function FindValue(RichEdit :TRichEdit; StrToFind :string) :boolean;
var
  FoundPos :Integer;
begin
  FoundPos := RichEdit.FindText(StrToFind, 0, Length(RichEdit.Text), []);
  Result := FoundPos <> -1;
  if Result then
  begin
   // necessário para que possamos obter o posicionamento 
   // na linha e coluna aonde o texto se encontra
    RichEdit.SelStart := FoundPos;
   // evita que seja mostrada qualquer seleção
    RichEdit.SelLength := 0;
  end;
end;

// utilizando...
var
  StrLinha :string;
begin
  ...
  if FindValue(RichEdit1, ´Objetivo´) then
  begin
   // se encontrou o texto, estaremos posicionados na linha aonde ele apareceu
    StrLinha := RichEdit1.Lines[RichEdit1.CaretPos.Y];
    ...
  end;
  ...
end;

Se for necessário utilizar uma busca contínua (n ocorrências até o término do texto), há necessidade de adaptação da função.

Espero ter ajudado.


Responder

18/03/2007

Marco Salles

Ha se puder usar o [b:1c6968ca16]RichEdit[/b:1c6968ca16] pude tb fazer:

function Retornar(RichEdit:TRichEdit;pesquisar :string):String; begin with RichEdit do result:=Lines.Strings[Perform(EM_LINEFROMCHAR,FindText(pesquisar, 0,Length(Text),[]),0)]; end;


procedure TForm1.Button3Click(Sender: TObject); begin showmessage(Retornar(RichEdit1,edit1.text)); end;


P:S quando retornar vazio é porque não encontrou


Responder

19/03/2007

Diegus

Valeu ae....
Fiz um pouco diferente...
O meu objetivo era ler a linha em q a palavra ´Objetivo´ estivesse...

Fiz o seguinte:

  //*****OBJETIVO
  if pos(´Objetivo´, adoq_Textotext.asString) <> 0 then
  begin
    ls_Var := Copy(adoq_Textotext.asString, pos(´Objetivo´, adoq_Textotext.asString), length(adoq_Textotext.asString) - Pos(´Objetivo´,adoq_Textotext.asString) + 1);

    adoq_PesquisacalcObjetivo.Value := trim(copy( ls_Var,
                                             1,
                                             pos(chr(13),ls_Var)));


Valeu pela atenção!


Responder

19/03/2007

Diegus

Valeu ae....
Fiz um pouco diferente...
O meu objetivo era ler a linha em q a palavra ´Objetivo´ estivesse...

Fiz o seguinte:

  //*****OBJETIVO
  if pos(´Objetivo´, adoq_Textotext.asString) <> 0 then
  begin
    ls_Var := Copy(adoq_Textotext.asString, pos(´Objetivo´, adoq_Textotext.asString), length(adoq_Textotext.asString) - Pos(´Objetivo´,adoq_Textotext.asString) + 1);

    adoq_PesquisacalcObjetivo.Value := trim(copy( ls_Var,
                                             1,
                                             pos(chr(13),ls_Var)));


Valeu pela atenção!


Responder

20/03/2007

Marco Salles

Se for para usar String , melhor com a Função PosEx , voce economia uma Função Copy de cara

posInicial:=pos(´objetivo´,adoq_Textotext.asString); if posInicial <> 0 Then begin posFinal:=PosEx(char(13),adoq_Textotext.asString,posInicial); ls_Var := Copy(adoq_Textotext.asString,posInicial,posFinal-posInicial); end;



Responder

APRENDA A PROGRAMAR DO ZERO AO PROFISSIONAL

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar