Unzap a um DBF

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

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 »

Pablo César escreveu:Mas absolutamente que não, não foi isso que eu disse.
O que você disse foi:
não creio que ampliando o tamanho do atual zapado com simplesmente mudar o ponteiro.
Entendo nessa frase que você está confundindo os termos, dando a entender que há um ponteiro envolvido na operação de chSize(). Não há. Naquele programa exemplo usa-se o reposicionamento do ponteiro do arquivo para a obtenção de alguns bytes. Mas pára por aí.
justamente para "ampliar" o tamanho do arquivo ZAPado, teria que disposicionar o ponteiro também. Não achas que é assim ?. Me refiro nesse exemplo que postei (em VFP).
Sim, sei que é nesse exemplo que se baseia, mas realmente a função fchSize() nada tem a ver com ponteiro. Acho que você está confundindo os termos. Ela não move o ponteiro pra lugar algum. Apenas ajusta o tamanho do arquivo.
[]'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 »

Maligno escreveu:
não creio que ampliando o tamanho do atual zapado com simplesmente mudar o ponteiro.
Entendo nessa frase que você está confundindo os termos, dando a entender que há um ponteiro envolvido na operação de chSize().
Ahh disponibilizando a minhas palavras dessa forma que você está fazendo, até eu acreditaria que o chSize() faria todo esse MILAGRE... a frase COMPLETA minha ja esclarece que ao que eu estou me referido é ao procedimento e não tão somente ao chSize. Maligno, veja a minha frase toda, não utilize SUBSTRINGS na minha frase para dar o sentido que vcê deu:

"Na verdade, não boto muita fé nesse código, não creio que ampliando o tamanho do atual zapado com simplesmente mudar o ponteiro... será ?"

Mas tudo bem, qualquer conselho que me é dado aceitarei convenientemente mas não posso admitir uma coisa que eu não disse. Agora que aquele código, posiciona o ponteiro antes de usar o chSize(), isso é necessário (acredito eu) para fazer uso do chSize(). Também não sei se o termo que utilizei de "ponteiro" serviria para fazer uso do posicionamento do arquivo no disco rígido e depois extender o seu fim de arquivo no cluster originariamente. Pelo menos é isso que eu entendí do código.

No entanto reconheço que eu não tenho muita intimidade com funções em baixo nível como você o tem maligno. Se quiseres comentar a respeito, esteja a vontade.
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 »

Pablo César escreveu:Ahh disponibilizando a minhas palavras dessa forma que você está fazendo, até eu acreditaria que o chSize() faria todo esse MILAGRE...
Mas faz. Esta função, eu já havia dito, é o coração do procedimento.
não posso admitir uma coisa que eu não disse.
Ok. Não vamos mais perder tempo com isso. :)))
Agora que aquele código, posiciona o ponteiro antes de usar o chSize(), isso é necessário (acredito eu) para fazer uso do chSize().
Sim. O ponteiro é reposicionado para obter os dados para calcular a que tamanho X irá o arquivo. Esse X alimenta chSize().
No entanto reconheço que eu não tenho muita intimidade com funções em baixo nível como você o tem maligno. Se quiseres comentar a respeito, esteja a vontade.
Essa função chSize() não é muito utilizada em lugar algum. Não tem respaldo em C por não ser ANSI. O procedimento em si, conforme discutimos, nem é tão útil assim. E pra finalizar: duvido que essa piçiroca funcione. :)))
[]'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
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Mensagem por Eolo »

Lapinha, vc está acompanhando a discussão? Cara, foi o que eu disse antes: esquece. DELETEou ou ZAPeou? Já era...

Há algumas empresas em ... ou ... ou ... (todas na Europa e adjacências) que vasculham o seu HD e acham o que até Deus duvida, mas isso vai lhe custar dinheiro, MUITO dinheiro. E elas não prometem 100% de retorno... Quanto vc tem pra gastar nisso? Vale a pena gastar uma bolada pra recuperar só parte das informações? Quanto valem essas informações?
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 »

Eolo, é bom ser prático. Mas talvez a pergunta foi originada por mera curiosidade... ja pensou se esse código fizer esse milagre que diz fazer ? Por falar disso, você tem VFP ?
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 esforço em realizar o que parece "perdido" normalmente é proporcional ao valor da perda. Só o OP pra dizer.
[]'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
rrfsistemas
Usuário Nível 3
Usuário Nível 3
Mensagens: 249
Registrado em: 11 Jul 2004 18:16
Localização: Uberlândia/MG

Mensagem por rrfsistemas »

Ja conseguiram testar ??

Eu estava fora do forum ha algum tempo por isso não vi a msg.
"Não é a ferramenta que faz o artesão e sim a sua criatividade...""
Renato Ribeiro Ferreira
Tecnologia em Analise de Sistemas de Informação
http://www.rrfsistemas.hd1.com.br
( VFP 9 + MySql e/ou Oracle 11 ) - ...Harbour/MiniGui...
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 »

Pois é Renato, faz tempo que não te vejo por estas bandas...

Pelo que eu sei, ninguém se disponibilizou para compilar esse exemplo em VFP, talvez o colega queira fazer alguns testes e ver se isso funciona mesmo.
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
rrfsistemas
Usuário Nível 3
Usuário Nível 3
Mensagens: 249
Registrado em: 11 Jul 2004 18:16
Localização: Uberlândia/MG

Mensagem por rrfsistemas »

Se vcs me derem as coordenadas eu posso tentar ajudar...
"Não é a ferramenta que faz o artesão e sim a sua criatividade...""
Renato Ribeiro Ferreira
Tecnologia em Analise de Sistemas de Informação
http://www.rrfsistemas.hd1.com.br
( VFP 9 + MySql e/ou Oracle 11 ) - ...Harbour/MiniGui...
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 »

O código fonte está aqui https://pctoledo.org/forum/viewto ... 9219#39219 só não sabemos se vai funcionar.
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
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem por gvc »

Recuperar o arquivo Zappeando não é uma coisa tão simples.
O DBase apaga os registro e reajusta o tamanho do arquivo DBF automaticamente.
O Clipper não faz isso.
Só que o header (é assim?) de arquivo controla tb a quantidade de registros contido nele.
Vale lembrar que existe um caracter de final de arquivo no final do último registro do arquivo em questão.
Como existe uma série de fatores contra o sucesso, acho dificil conseguir.
Se é por pesquisa, até vale a pena, mas por trabalho acho complicado (custo / benefício)

- Pegue toda a descrição do header de arquivo DBF.
- Verifique todos os valores do header do seu DBF.
- Determine o fim do header e início dos dados.
- Determine o local atual do caracter de fim de arquivo e mude-o conforme a regra de DBF. Acho que é colocar esse byte para chr(32). Lembrando que o tamanho do registro é o tamanho de todos os campos + 1 byte de controle. Esse byte no final do registro é o que deve ser mudado.
- Determine o último registro.
- Mude o caracter de fim de arquivo para o byte de controle desse último registro.
- Acerte, no header, a quantidade de registros do seu dbf.

(lembrando que isso tudo é teoria. Felizmente não tive que colocar em prática.)

Espero ter ajudado. Boa sorte.
"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}
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 »

Pois é GVC até esse ponto nós chegamos a essa mesma conclusão, agora se funciona ou não, acho que só compilando para ver se dá certo. Ahh e tem uma situação certa, que acredito que só será capaz de UNZAPear caso fosse esta uma das ultimas gravações em disco que foram feitas. Pois se algo foi gravado nessa parte que foi liberada, então bau bau (acho eu).

Mas esperemos talvez o Renato (rrfsistemas ) compile para nós e nos dê um resultado.
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
Netavin
Usuário Nível 3
Usuário Nível 3
Mensagens: 306
Registrado em: 28 Fev 2007 08:37
Localização: Cacoal-RO

Mensagem por Netavin »

Amigões !! boa tarde !
... bem, sou iniciante em VFP e testei a rotina da seguinte forma:
peguei um DBF e zapei geral; usei o unzup e "recuperei" 47 registros. Recuperei vírgula!!! os campos apareceram todos zerados ou seja, os campos numéricos apareceram com "zeros", os campos data "vazios" e os campos texto "em branco", sem nada.

se precisar mais alguma ajuda ...

[]´s

Netavin
TK90 / TK95 / APPLE IIe / 286 / 386 / 486 / 586 / AMD Atlhon
" Sem saber que era impossível, foi lá e fez !! "
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 »

Netavin escreveu:"recuperei" 47 registros.
Bom dia colega, esses 47 registros foram o número exato que possuia o DBF ?. Outra pergunta: esse UNZAP você fez logo após que você fez o ZAP ?. Ou você fez alguma gravação no seu HD posterior ao ZAP ?
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
Netavin
Usuário Nível 3
Usuário Nível 3
Mensagens: 306
Registrado em: 28 Fev 2007 08:37
Localização: Cacoal-RO

Mensagem por Netavin »

bom dia!
... ZAPeei, fiz uma cópia dele no "C:\", abri o VFP e executei o UNZUP.
Havia muito mais registros do que os 47 que tentei recuperar. Uns 9.000 registros mais ou menos.

[]´s

Netavin
TK90 / TK95 / APPLE IIe / 286 / 386 / 486 / 586 / AMD Atlhon
" Sem saber que era impossível, foi lá e fez !! "
Responder