Eliminar Duplicidade em uma DBF
Moderador: Moderadores
Eliminar Duplicidade em uma DBF
Bom dia amigos, novamente estou aqui, e sempre me sinto a vontade em pedir, pois sempre fui muito bem atendido, e vocês não tem noção de quanto me ajudam, então desde já deixo meus agradecimentos.
Amigos mais uma vez preciso de uma ajuda.
Quanto mais mexo na DBF mais coisas aparecem para fazer, agora peciso de uma PRG que limpe duplicidades.
A DBF chamada CADASSO tem o Campo NOME e ENDERECO eu precisava alguma PRG que fizesse a comparação entre esses dois campos e se caso ele encontrar o mesmo "nome" com o mesmo "endereço", ele moveria todos os nomes iguais e deixaria apenas um na DBF CADASSO, e os nomes que foram movidos fossem para uma nova DBF que dariamos o nome de DUPLI, ou seja moveria a mesma estrutura so que somente com os dados iguais que foram retirados da DBF CADASSO " original".
Desde já agradeço a atenção e a ajuda, fiquem em paz, e me desculpem por tanto pedir
Amigos mais uma vez preciso de uma ajuda.
Quanto mais mexo na DBF mais coisas aparecem para fazer, agora peciso de uma PRG que limpe duplicidades.
A DBF chamada CADASSO tem o Campo NOME e ENDERECO eu precisava alguma PRG que fizesse a comparação entre esses dois campos e se caso ele encontrar o mesmo "nome" com o mesmo "endereço", ele moveria todos os nomes iguais e deixaria apenas um na DBF CADASSO, e os nomes que foram movidos fossem para uma nova DBF que dariamos o nome de DUPLI, ou seja moveria a mesma estrutura so que somente com os dados iguais que foram retirados da DBF CADASSO " original".
Desde já agradeço a atenção e a ajuda, fiquem em paz, e me desculpem por tanto pedir
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Esse negócio de comparar strings... não é dificil. eu faria assim...
1. Utilize arquivo de índice no campo NOME, dessa forma será mais rápido a procura e comparação em looping
2. Coloque em variáveis os campos do primeiro registro e dê um skip
3. Compare com: IF VNOM=NOME .AND. VEND=ENDERECO
4. Abra antecipadamente o arquivo DUPLI e dê um append from rec <numero registro>
5. Retorne a área onde estava (sele CADASSO) e dê um delete para apagar esse registro
Mas acho que essa forma não é a mais correta de fazer. Pois muitas vezes o usuário dá um espaço a mais ou erra num dígito e a comparação ficaria comprometida. Acho que essa verificação deve ser feita no momento de inclusão/alteração de registros naqueles campos.
1. Utilize arquivo de índice no campo NOME, dessa forma será mais rápido a procura e comparação em looping
2. Coloque em variáveis os campos do primeiro registro e dê um skip
3. Compare com: IF VNOM=NOME .AND. VEND=ENDERECO
4. Abra antecipadamente o arquivo DUPLI e dê um append from rec <numero registro>
5. Retorne a área onde estava (sele CADASSO) e dê um delete para apagar esse registro
Mas acho que essa forma não é a mais correta de fazer. Pois muitas vezes o usuário dá um espaço a mais ou erra num dígito e a comparação ficaria comprometida. Acho que essa verificação deve ser feita no momento de inclusão/alteração de registros naqueles campos.
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.
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.
Aí vai uma sugestão: o arquivo CADASSO.dbf é mantido intacto; o arquivo UNICO.dbf vai conter um registro de cada nome+endereço; o arquivo DUPLI.dbf vai conter as duplicidades.
Código: Selecionar todos
use cadasso new excl
copy stru to dupli
copy stru to unico
use dupli new excl
use unico new excl
inde on nome+endereco to unico
set inde to unico
sele cadasso
go top
do whil !eof()
sele unico
seek cadasso->nome+cadasso->endereco
if found()
sele dupli
endi
appe blan
repl nome with cadasso->nome
repl endereco with cadasso->endereco
sele cadasso
skip
endd
quit
OBRIGADO E DESCULPE, MEU PROBLEMA É QUE NÃO SEI MONTAR PRG O QUE FAÇO AS VEZES É ALTERAR ALGUMA COISA, SE POSSÍVEL E SE VC TIVER UM TEMPO DISPONÍVEL PODERIA FAZER ESSA PRG PRA MIM, PENSANDO NO QUE VC DISSE EM RESPEITO AOS ESPAÇOS EM BRANCO, SERIA MAIS FÁCIL FAZER A COMPARAÇÃO ENTRE O CAMPO "NOME" E O CAMPO "TELEFONE1" ?Pablo César escreveu:Esse negócio de comparar strings... não é dificil. eu faria assim...
1. Utilize arquivo de índice no campo NOME, dessa forma será mais rápido a procura e comparação em looping
2. Coloque em variáveis os campos do primeiro registro e dê um skip
3. Compare com: IF VNOM=NOME .AND. VEND=ENDERECO
4. Abra antecipadamente o arquivo DUPLI e dê um append from rec <numero registro>
5. Retorne a área onde estava (sele CADASSO) e dê um delete para apagar esse registro
Mas acho que essa forma não é a mais correta de fazer. Pois muitas vezes o usuário dá um espaço a mais ou erra num dígito e a comparação ficaria comprometida. Acho que essa verificação deve ser feita no momento de inclusão/alteração de registros naqueles campos.
GRATO
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Puxa... Eolo... isso que é ajuda !
Obs.: faltaria deletar os registros em duplicidade no arquivo CADASSO (poderia ter usado o INDEX UNIQUE e copiar para UNICO.DBF) e appendar somente uma única vez o registro duplicado ou triplicado (nunca se sabe quantas vezes estaria repetido o registro) no arquivo DUPLI.DBF
Obs.: faltaria deletar os registros em duplicidade no arquivo CADASSO (poderia ter usado o INDEX UNIQUE e copiar para UNICO.DBF) e appendar somente uma única vez o registro duplicado ou triplicado (nunca se sabe quantas vezes estaria repetido o registro) no arquivo DUPLI.DBF
Editado pela última vez por Pablo César em 08 Jan 2008 09:39, em um total de 3 vezes.
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.
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.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Sabe colega eu gostaria de ajudar você, mas para isso você precisa ajudar-se a si mesmo. O que eu quero dizer, que caso você tenha intenção de ser um programador, tem que meter a caras. Coloque o seu código fonte (utilize as opções de edição "Code", é claro) que eu irei ajudar. O colega Eolo, fez uma rotina, cabe a você trabalhar encima dela e pedir ajuda caso você não consiga. è muito importante que você meta mãos à massa, dê uma chance a você mesmo, soará agora neste momento que eu não estou querendo te ajudar, ou alias que estou fazendo doce para te ajudar, mas na realidade se você intentar fazer (sem medos, faça uma cópias num diretorio aparte), tenho certeza que sozinho ou até com a nossa ajuda você conseguirá. Não me agradeça agora, tenho certeza que você algum dia irá lembrar disto e irá pensar (foi barbada) e agradecer na sua mente. Já isso é uma ótima recompensa para mim.kristo escreveu:MEU PROBLEMA É QUE NÃO SEI MONTAR PRG O QUE FAÇO AS VEZES É ALTERAR ALGUMA COISA, SE POSSÍVEL E SE VC TIVER UM TEMPO DISPONÍVEL PODERIA FAZER ESSA PRG PRA MIM
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.
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.
Pablo
Eu so pedi para o nosso amigo montar, pois eu não sei como começar nem como terminar, e sempre antes de pedir ajuda a vcs, pode ter certeza que já tentei de tudo, por mim mesmo, quebrando a cabeça, compilando, lendo mensagens de erros, etc..., qdo venho até vcs é pq realmente não consegui, qto a rotinha do nosso amigo eu não tinha visto, uma vez visto eu pego compilo e faço as mudanças, no caso do campo endereço para telefone1, e deu certo.
Quanto a ser programador, quem me dera, esse não é meu ramo, o que eu sei que o clipper é uma linguagem que sempre trabalhei, ressaltando que so trabalhei nunca programei, então tento ler algo aqui algo ali, e vou tentando adaptar meu trabalho para que ele fique mais rápido e menos desgastante, mais se tem algo que eu admiro é ver vcs resolvendo e ajudando as pessoas, eu também gostaria de ser assim, so não tem nem idéia de como começar, bom mais resumindo, o importante é que deu certo novamente, so tenho a agradecer a vcs.
Desculpe qualquer coisa, tentarei não pedir tanto, podem até me achar desenteressado, mais não sou, adoraria aprender mesmo, e tento da forma que posso.
Fiquem com Deus, e obrigado!
Kristo
Eu so pedi para o nosso amigo montar, pois eu não sei como começar nem como terminar, e sempre antes de pedir ajuda a vcs, pode ter certeza que já tentei de tudo, por mim mesmo, quebrando a cabeça, compilando, lendo mensagens de erros, etc..., qdo venho até vcs é pq realmente não consegui, qto a rotinha do nosso amigo eu não tinha visto, uma vez visto eu pego compilo e faço as mudanças, no caso do campo endereço para telefone1, e deu certo.
Quanto a ser programador, quem me dera, esse não é meu ramo, o que eu sei que o clipper é uma linguagem que sempre trabalhei, ressaltando que so trabalhei nunca programei, então tento ler algo aqui algo ali, e vou tentando adaptar meu trabalho para que ele fique mais rápido e menos desgastante, mais se tem algo que eu admiro é ver vcs resolvendo e ajudando as pessoas, eu também gostaria de ser assim, so não tem nem idéia de como começar, bom mais resumindo, o importante é que deu certo novamente, so tenho a agradecer a vcs.
Desculpe qualquer coisa, tentarei não pedir tanto, podem até me achar desenteressado, mais não sou, adoraria aprender mesmo, e tento da forma que posso.
Fiquem com Deus, e obrigado!
Kristo
Se vc tem um campo de documento (RG ou CPF) vc pode usá-lo para organizar seu arquivo e apagar duplicidade. Mas vc deverá criar um padrão para entrada do documento.
O problema da comparação de campo Nome (P.Ex.) é que na entrada pode ter alguma coisa "pequena" (Isabel e Izabel p.ex.). Abreviação então, é um pesadelo.
O problema da comparação de campo Nome (P.Ex.) é que na entrada pode ter alguma coisa "pequena" (Isabel e Izabel p.ex.). Abreviação então, é um pesadelo.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
{POG - Programação Orientada a Gambiarra}
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Só para complementar mais um pouco...
http://www.receita.fazenda.gov.br/Aplic ... ublica.asp
O problema que tal verificação deve ser feita manualmente e 1 CPF por vez, por causa do gráfico de código autenticador. DAM !
Para identificar a pessoa, acertadamente através de CPF, mas RG, como não existe padrão algum, recomenda-se remover traços, pontos e até mesmo caracteres ALFA (isso se for nacionalidade brasileira) no entanto para estrangeiros acredito que tem uma norma. Nesses casos o código para estrangeiros e ALFA e NUMEROS. Batata é mesmo fazer pelo CPF ahhh e ainda consultar a Receita Federal para confirmar se o número fornecido pertence mesmo a tal pessoa e ainda verficar a condição de cadastro (se está REGULAR, SUSPENSA ou PENDENTE) em:gvc escreveu:Se vc tem um campo de documento (RG ou CPF) vc pode usá-lo
http://www.receita.fazenda.gov.br/Aplic ... ublica.asp
O problema que tal verificação deve ser feita manualmente e 1 CPF por vez, por causa do gráfico de código autenticador. DAM !
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.
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.
Rapaz! Você vai acabar dando um nó na cabeça do colega.e ainda consultar a Receita Federal para confirmar se o número fornecido pertence mesmo a tal pessoa e ainda verficar a condição de cadastro
Acho que é um bom caminho o colega pegar o código cedido pelo Eolo e ir trabalhando em cima, tentando entender como os comandos funcionam e, conforme o caso, ir postando suas dúvidas.
Pra quem não conhece programação, código é meio de didática. Não pode (ou não deveria) ser meio de trabalho.
[]'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!
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!
A Todos os colegas!
Realmente estou trabalhando sobre a rotina postada pelo nosso amigo, realmente passa algumas duplicidades despercebidas, ou seja qdo o campo telefone ou nome vem com alguma letra ou número diferente, mais está ótimo, dá para eliminar muitas duplicidades, o restante eu faço manualmente mesmo, afinal o banco de dados não é tão grande, questão de 40 mil nomes, dá um certo trabalho, mais infelizmente não tenho outro campo para pesquisar, esse banco de dados é enviado pelos clientes da empresa, é sobre compradores e montadoras de veículos, já vem sem CPF, RG ou coisa parecida, e pra cada montadora a DBF muda, eis a minha necessidade de estar sempre mudando a rotina de trabalho.
Agradeço a todos pela ajuda que me foi passada, está sendo ótimo para mim.
Paz a todos
Kristo
Realmente estou trabalhando sobre a rotina postada pelo nosso amigo, realmente passa algumas duplicidades despercebidas, ou seja qdo o campo telefone ou nome vem com alguma letra ou número diferente, mais está ótimo, dá para eliminar muitas duplicidades, o restante eu faço manualmente mesmo, afinal o banco de dados não é tão grande, questão de 40 mil nomes, dá um certo trabalho, mais infelizmente não tenho outro campo para pesquisar, esse banco de dados é enviado pelos clientes da empresa, é sobre compradores e montadoras de veículos, já vem sem CPF, RG ou coisa parecida, e pra cada montadora a DBF muda, eis a minha necessidade de estar sempre mudando a rotina de trabalho.
Agradeço a todos pela ajuda que me foi passada, está sendo ótimo para mim.
Paz a todos
Kristo
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Veeejaaa ! queimar um pouco de neurônios que eu saiba não faz mal a ninguém... e depois de tudo, o meu comentário tem o propósito de alimentar novas idéias, não somente para o colega kristo como para outros também.Maligno escreveu:Você vai acabar dando um nó na cabeça do colega.
Pois é... era isso a que eu me referia, fazer comparação de strings digitadas pelos usuários, dá isso aí... Eu também tenho no meu sistema, uma rotina com margem porcentual para comparação. Isto é:kristo escreveu:realmente passa algumas duplicidades despercebidas, ou seja qdo o campo telefone ou nome vem com alguma letra ou número diferente
Se num registro estiver: "João Carlos Fernandez" e outro registro "Joao C. Fernandes" a rotina irá me dar como "possível" duplicidade e dispõe em tela os dois registros com o restantes de informações (as info relevantes) e pergunto se estas duas pessoas são as mesmas, daí se o usuário dizer que sim e não for (problema dele... hihihi). Não vejo outra forma, isto é, sem não houver uma inteiração manual do usuário e uma verificação de "letra por letra", transformando os acentos em caracter normal INCLUSIVAMENTE.
Mas enfim, quem quiser pode adotar ou melhorar a idéia, e quem não quiser se preocupar que fique assim mesmo... A questão da qualidade é problema de cada um.
Eu dou meus votos de "Parabéns" ao kristo, ora porque como usuário ele preocupa-se com os seus dados e faz o que for para melhorar. Preocupação que devia ter sido do programador que fez o sistema. Também deixo meu ensejo para que o kristo venha a se tornar programador algum dia e participe aqui no fórum postando seu códigos-fontes da forma que for, com erros ou com pé e sem cabeça... mas que terá meu auxilio e acredito de outros... por quê não ?. Talvez muitos dos colegas aqui não irão gostar com o que vou te indicar... mas acredito que para agora no seu início nas suas tentativas de melhoras dos seus sistemas o kristo poderia dar uma olhadinha no MIRO. este "gerador de aplicativos" irá dar-lhe um grande insetivo não somente com a questão estética dos seus sistemas como também em algumas questões que o próprio programador tem que fazer seus ajustes na munheca (programação interativa nos módulos gerados pelo Miro) e isso será bom pra você também...
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.
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.
Pablo X miro
Olá Pablo, realmente eu tenho o miro, e sempre faço alguns programinhas com ele, pois ele é muito rápido e não e tão complexo em matéria de ter que digitar linha por linha (mais eu adoraria montar um programa do pé a cabeça), o ruim pra mim é que não sei como usar o que o clipper pode me oferecer, ou seja se precisar fazer algo mais complexo, ai laskou tudo.
Deixo aqui meus agradecimentos a todos, e se por acaso alguém puder me dar uma ajuda em relação a programação eu ficarei muito grato, queria ao menos saber como usar os comandos do clipper, ou seja saber o que significa cada um, para eu ir me adaptando, se alguém puder me passar essas informações, seria de grande ajuda, pois ai sim eu iria meter as caras em casa, nos finais de semana, tentando montar algo, leio vcs conversando entre sim, dando idéias e parece tão simples para vcs, quem sabe um dia chego lá, aqui na minha cidade não tem ninguém ou nenhum lugar que ensine a programação em clipper, sei que existe várias outras, mais do meu pequeno conhecimento, nunca ví uma serramente tão interessante qto ao clipper.
Abraço a todos, e fiquem com Deus
Deixo aqui meus agradecimentos a todos, e se por acaso alguém puder me dar uma ajuda em relação a programação eu ficarei muito grato, queria ao menos saber como usar os comandos do clipper, ou seja saber o que significa cada um, para eu ir me adaptando, se alguém puder me passar essas informações, seria de grande ajuda, pois ai sim eu iria meter as caras em casa, nos finais de semana, tentando montar algo, leio vcs conversando entre sim, dando idéias e parece tão simples para vcs, quem sabe um dia chego lá, aqui na minha cidade não tem ninguém ou nenhum lugar que ensine a programação em clipper, sei que existe várias outras, mais do meu pequeno conhecimento, nunca ví uma serramente tão interessante qto ao clipper.
Abraço a todos, e fiquem com Deus
Acho que uma boa forma de aprender a linguagem é ir lendo o NG. Primeiro os comandos, depois as funções, etc. Todos os ítens tem algum código exemplo. Dá pra aprender muita coisa. É só ter disciplina e dedicação. Depois de se familiarizar com o básico, proponha-se a montar um primeiro programa de uso prático pra consolidar os conhecimentos. Depois, com o tempo, vai ficando bem fácil. Na dúvida, existe o fórum. 
[]'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!
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!
-
JoãoBC
- Usuário Nível 1

- Mensagens: 18
- Registrado em: 01 Jun 2020 16:47
- Localização: Rio de Janeiro, RJ
Eliminar Duplicidade em uma DBF
Olá, pessoal, bom dia.
Conheci esta página procurando no google "dbase registro duplicado".
Tentei usar o programa direto no dbase IV, mas não funcionou, deu erro logo na primeira linha, onde aparece
use cadasso new excl
Deu comando não reconhecido para a palavras "new excl"
Não vi no texto qual a versão do clipper.
Se alguém puder me ajudar, agradeço.
Conheci esta página procurando no google "dbase registro duplicado".
Tentei usar o programa direto no dbase IV, mas não funcionou, deu erro logo na primeira linha, onde aparece
use cadasso new excl
Deu comando não reconhecido para a palavras "new excl"
Não vi no texto qual a versão do clipper.
Se alguém puder me ajudar, agradeço.


