busca por palavra

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

evaldo
Usuário Nível 3
Usuário Nível 3
Mensagens: 113
Registrado em: 27 Out 2005 23:29

busca por palavra

Mensagem por evaldo »

Ola pessoal, estou precisando de um busca por palavra ex.: qdo digitar joao aparecer todos joao.

antonio joao
joao carlos

obrigado
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Se você utiliza a biblioteca SIX, tem a sua disposição a função sx_WildSeek(), que serve pra isso mesmo. Se não utiliza a SIX e quiser testar, pegue no meu site. Link: http://pub.buzinello.com/index.php?d=./ ... pper/libs/

Claro que, alternativamente, num DBF pequeno, você também poderia utilizar SET FILTER. Mas se o volume de dados a pesquisar for muito grande, é melhor esquecer; o desempenho cai drasticamente.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Luciano Bonfim
Usuário Nível 3
Usuário Nível 3
Mensagens: 414
Registrado em: 23 Ago 2007 09:34
Localização: Rio de Janeiro / São Paulo
Contato:

Mensagem por Luciano Bonfim »

você pode utilizar o velho e bom LOCATE....
Muito Obrigado,

Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Avatar do usuário
Luciano Bonfim
Usuário Nível 3
Usuário Nível 3
Mensagens: 414
Registrado em: 23 Ago 2007 09:34
Localização: Rio de Janeiro / São Paulo
Contato:

Mensagem por Luciano Bonfim »

Eu particularmente quando tenho que fazer isso varro todo o arquivo e testo se o campo possui a palavra... ai vou jogando para um vetor e depois dou um tbrowse nesse vetor.... funciona que é uma beleza...
Muito Obrigado,

Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

LOCATE e SET FILTER tem o mesmo problema: se o volume de dados for grande, é melhor fazer a busca na hora do almoço. Quando voltar, talvez ele tenha terminado.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Luciano Bonfim
Usuário Nível 3
Usuário Nível 3
Mensagens: 414
Registrado em: 23 Ago 2007 09:34
Localização: Rio de Janeiro / São Paulo
Contato:

Mensagem por Luciano Bonfim »

é claro.. isso é clássico!!!! rsrsrsrsrs
Muito Obrigado,

Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Eu também desaconselho o uso do LOCATE quando tem em vista que o arquivo pode ser grande de tamanho. Utilizando a indexação é o mais indicado, porém quando se trata de procurar o "joao" no meio do nome ou final, realmente a saída é usar o LOCATE. Não sei se o uso da biblioteca SIX tem algum opção de procura semelhante ao LOCATE. Mas acredito que a solução mais habitual é a indexação do campo que você procura. Aqui no fórum tem um exemplo desse tipo de busca (e em TBROWSE), dê uma olhada na seção Download - Funções com Fontes em:

https://pctoledo.org/download/cop ... t&deonde=2

ou

https://pctoledo.org/download/cop ... t&deonde=2

Eu acho que se tem essa necessidade do usuário ter que pesquisar dessa forma, com certeza eu faria uma indexação do campo NOME.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

porém quando se trata de procurar o "joao" no meio do nome ou final, realmente a saída é usar o LOCATE. Não sei se o uso da biblioteca SIX tem algum opção de procura semelhante ao LOCATE.
Tem. É a função sx_WildSeek() que comentei na minha primeira mensagem. Mas não é semelhante à LOCATE ou SET FILTER quanto à forma de trabalho. Você só precisa que o campo a pesquisar tenha uma chave de índice. Aliás, eu havia me esquecido de comentar isso. Se bem que é fácil deduzir. :)
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Sim é fácil de deduzir, mas o que eu queria saber se existe alguma função so SIX ou até mesmo de outro RDD que possa fazer a procura por SUBSTRING, assim como o faz o LOCATE. será que tem ?
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Essa função sx_WildSeek() faz exatamente isso, utilizando o índice.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Ahh é ? Isso que queria saber. Só para confirmar mais uma vez Maligno:

Se eu tiver um caso em que o nome do cliente é:

"JOAO PAULO DA SILVA"

E preciso pesquisar esse campo, com sx_WildSeek() ela vai encontrar a string JOAO que procuro ?

Sei que talvez não seja o caso do colega Evaldo, mas gostaria de saber se funciona mesmo ao igual que o LOCATE mesmo e não tão somente se começar com a string JOAO.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Se, por exemplo, você procurar por "PAULO" a função encontrará a primeira ocorrência. Não importa onde esteja a sub-string. E com um argumento especial, ela continuará a busca até encontrar outra ocorrência. Mesmo que o volume de dados seja gigantesco, a pesquisa é instantânea.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Luciano Bonfim
Usuário Nível 3
Usuário Nível 3
Mensagens: 414
Registrado em: 23 Ago 2007 09:34
Localização: Rio de Janeiro / São Paulo
Contato:

Mensagem por Luciano Bonfim »

interessante essa funçäo, eu näo a conhecia.... funciona no xharbour?
Muito Obrigado,

Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Beleza ! Quê bom que é essa sx_WildSeek() então. Não sabia disso e que não compremetia a rapidez de execução por conta do tamanho. Obrigado pelo esclarecimento, Maligno.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

O Xharbour, ao que me parece, tem uma biblioteca compatível com a SIX. Salvo engano, não está completa e talvez não tenha uma função equivalente a essa. Mas lance a dúvida na seção de XHarbour. Certamente alguém responderá.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Responder