sacofritoxd Postado Maio 26, 2010 Denunciar Share Postado Maio 26, 2010 Boa tardeTenho um banco de dados no formato '.dat'mas não consigo abri-loapenas por bloco de notas e sai tudo misturado.. algm pode me ajudar a abrir?já pesquisei sobremas não sei de onde ele veio e nem tenho cmo saber pois esse bd era de sistema antigo de um pessoal q está pra virar cliente nossoe a empresa q fazia o sistema deles fechou .. enfim não tenho cmo saber como ele foi geradoalgm sabe se tem algum otro jeito de eu abrir esse bd com os dados alinhados?um usuario de um outro fórum abriu um de 2 bd's q eu tenho em .date me mandou os dados alinhados link pra download desse arquivohttp://vbmania.com.br/pages/vbmdownload.ph...2&varTipo=1Obrigado desde já Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 sacofritoxd Postado Maio 27, 2010 Autor Denunciar Share Postado Maio 27, 2010 (editado) Boa tarde galerajá fiz um tópico mas parece que ninguém consegue me ajudar rsrsrsagr to tentando fazer outra coisapegar todos dados dentro desse arquivo .dat e transferir para .txta minha funçao está assimalgm me ajuda a descobrir o porque ela só esta dando um loop e não faz realmente até estar vazioDim ds As String Function eu() Open "c:\PDVPPROD.dat" For Input As #1 While Not EOF(1) Line Input #1, ds Open "c:\pdvprod1.txt" For Output As #2 Print #2, ds Wend End Function Private Sub Command1_Click() eu MsgBox "pronto" End End Subsó tem o form com 1 botao de comando qc hama a funçao euai eu debugo e o sistema apenas passa uma vez pelo laçoObrigado desde já Editado Maio 27, 2010 por kuroi Adicionar tag CODE Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Maio 27, 2010 Denunciar Share Postado Maio 27, 2010 juntei os topicos, evita ficar criando varios topicos sobre o mesmo assunto.mas se você quer transformar o dat em txt, tudo o q você tem q fazer é renomear o arquivo (F2 no windows explorer) e trocar ".dat" por ".txt".mas abri o seu arquivo .dat aqui num editor binario e vi q o motivo de esse codigo não funcionar é q o seu arquivo ta cheio de caracteres 0 no meio. e o visual basic entende caracter 0 como fim de arquivo. por isso, ele so copia os primeros 30 caracteres, pois o proximo caracter é 0 e ele entende q o txt acabou.se você quer copiar o conteudo do arquivo (o q teria o mesmo efeito de copiar e colar o arquivo no explorer), acho q você poderia abrir como binario e ler byte por byte. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 sacofritoxd Postado Maio 27, 2010 Autor Denunciar Share Postado Maio 27, 2010 hum foi mal pelos tópicos repetidosMas como assim ele le o 0 e interpreta como fim de arquivoate entendi .... mas a coisa mais doida é q uma pessoa de um outro fórum de vb, abriu e me mandou todo alinhado o arquivo todo...voce tem idéia de como ele fez isso?e você tem como me explicar como faz pra abrir como binário e ler bye por byte?vlw Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Maio 27, 2010 Denunciar Share Postado Maio 27, 2010 Mas como assim ele le o 0 e interpreta como fim de arquivovocê conhece a tabela asccii, certo?? cada caracter tem um numero. a letra "a" minuscula é o caracter numero 97 por exemplo. o caracter 0 significa final de string. em textos significa q o texto terminou. mas em arquivos binarios, é usado pra respresentar os dados como qualquer outro caracter. não sei de qual bd veio esse seu arquivo .dat, mas imagino q eles usem o caracter 0 pra separar os campos, o qualquer coisa assim. quando você abre o arquivo pra Input no visual basic, ele espera q seja um texto, por isso quando ele encontra o caracter 0 no meio do texto, ele entende q o texto terminou e para de ler.mas a coisa mais doida é q uma pessoa de um outro fórum de vb, abriu e me mandou todo alinhado o arquivo todo...voce tem idéia de como ele fez isso?ou ele sabe de qual banco veio seu arquivo .dat, importou os dados e depois extraiu o txt pra vc, ou então, ele deve ter entendido a estrutura do arquivo .dat, e fez alguma funcao pra ler o arquivo e reescreve-lo alinhado, ai nesse caso, eu diria q esse cara deve ser bem locao pra interpretar um arquivo binario.ou ainda, esse arquivo .dat talvez esteja numa estrutura q seja relativamente conhecida, e gente q tenha finalidade com ela poderia conseguir arruma-lo facil pra você.o melhor seria você tentar pedir explicacao pra esse cara q arrumou o arquivo pra você da outra vez.e se um dia ele te contar o q ele fez, volta aqui pra me contar, q eu tb queria saber.e você tem como me explicar como faz pra abrir como binário e ler bye por byte?seria mais o menos assim:Function eu() Dim b As Byte Dim l As Long, i As Long Open App.Path & "\PDVPPROD.dat" For Binary Access Read As #1 Open App.Path & "\pdvprod1.txt" For Binary Access Write As #2 l = LOF(1) For i = 0 To l - 1 Get #1, , b Put #2, , b Next Close #1 Close #2End Function[/code] na verdade, você poderia copiar o conteudo todo de uma vez, q iria muito mais rapido: [code]Function eu() Dim b() As Byte Dim l As Long Open App.Path & "\PDVPPROD.dat" For Binary Access Read As #1 Open App.Path & "\pdvprod1.txt" For Binary Access Write As #2 l = LOF(1) If l Then ReDim b(1 To l) As Byte Get #1, , b() Put #2, , b() End If Close #1 Close #2End Functionentretanto, costumo ter problemas com esse codigo, ele insere uns espacos a mais no novo arquivo. o q se costuma fazer é usar o codigo de cima, ou ainda dividir a cada 1024 bytes, o q costuma levar menos tempo tb. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 sacofritoxd Postado Maio 27, 2010 Autor Denunciar Share Postado Maio 27, 2010 deixei uma mensagem pessoal para voce Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Maio 27, 2010 Denunciar Share Postado Maio 27, 2010 é, ele disse q fez isso manualmente. ele estudou a estrutura do arquivo e arrumou os textos.como ele disse, cada campo ocupa um espaco, você pode separar com mid().sabendo disso, o q você precisa saber agora é qual o espaco q ocupa cada campo e depois é so separar.quando eu tiver um tempo aqui, vo ver se do uma estudada nesse seu arquivo. se a gente trocar os caracteres 0 por espaco, poderemos usar o mid(). Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 sacofritoxd Postado Maio 27, 2010 Autor Denunciar Share Postado Maio 27, 2010 humm...mas estranho ele ter fe ito isso tão rápido.. ele não deve ser uma pessoa sem afazeres p ter feito tudo isso pra mim...mas de qualquer jeito peguei um email dele la no fórum e adicionei no MSN e vou mandar email pra ele pedindo para ele me explicar como feze na verdade tenho mais 2 bd's em formato .dat para fazer essa conversãoesse q postei no fórum e mais um de fornecedoresmas agradeço sua ajuda Kuroi.. espero sua resposta Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 sacofritoxd Postado Maio 31, 2010 Autor Denunciar Share Postado Maio 31, 2010 Fala kuroide uma olhada la no meu tópico no outro fórumem sua caixa de entrada.. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Junho 1, 2010 Denunciar Share Postado Junho 1, 2010 (editado) beleza, olha o q eu fiz pra você usando um codigo bem besta em c:esse.rarnão ficou aquelas coisas, mas da uma olhada ai. Editado Junho 1, 2010 por kuroi Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 sacofritoxd Postado Junho 1, 2010 Autor Denunciar Share Postado Junho 1, 2010 humm valeu kuroi eu tava fazendo tudo manualmente....tava qse no final.. você me adiantou um trabalhao... tem como você me ensinar como fez isso em c?manjo menos de c do q manjo de vb.. ou seja conhecimento qse nulo rsrs.. sei fazer apenas programinhas de faculdade q n servem pra nada hsuashuahsaAbraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Junho 1, 2010 Denunciar Share Postado Junho 1, 2010 o codigo q eu usei em c foi esse:#include <iostream>void Limpa();void Separa();int main(void){ Limpa(); Separa(); return 0;}void Limpa(){ int cont = 0, valor = 0; unsigned char ch; FILE *fp; FILE *gravador; fp = fopen ("PDVPPROD.dat", "rb"); gravador = fopen("PDVPPROD.txt", "wb"); while (fscanf(fp, "%c", &ch) != EOF) { //if (ch == '' || ch == 10 || ch == 13) if (ch < 32 || ch == 127) { ch = ' '; } fprintf(gravador, "%c", ch); cont++; } fclose(fp); fclose(gravador);}void Separa(){ int cont = 0, valor = 0; unsigned char ch; bool inicio = false; FILE *fp; FILE *gravador; fp = fopen ("PDVPPROD.txt", "rb"); gravador = fopen("esse.txt", "wb"); while (fscanf(fp, "%c", &ch) != EOF) { fprintf(gravador, "%c", ch); cont++; if (cont == 853) { fprintf(gravador, "%c", 13); fprintf(gravador, "%c", 10); inicio = true; cont = 0; } if (inicio && cont == 282) { fprintf(gravador, "%c", 13); fprintf(gravador, "%c", 10); cont = 0; } } fclose(fp); fclose(gravador);}[/code]eu primero fiz o codigo pra tirar os caracteres 0 e ver como ia ficar o txt. depois fiz o codigo pra separar as linhas, por isso ficaram duas funcoes separadas, mas podia ser uma so.eu contei q cada linha tinha 283 caracteres, e então eu mandava dar um enter sempre q chegasse nesse valor.quando ao problema do preço, isso é porque os valores esta gravados como valor mesmo e não como texto. pelo q parece são quatro campos juntos (preço, custo, desconto, promocao), cada um com 4 bytes. hj a noite vejo se consigo transforma-los em float aqui. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 sacofritoxd Postado Junho 2, 2010 Autor Denunciar Share Postado Junho 2, 2010 Hum.. interessante a lógica...tenho q aprende mt ainda heheMas então o preço são aqueles caracteres estranhos ali ?Mas obrigado.. aguardo sua ajuda com a questao do preço..Abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 sacofritoxd Postado Junho 4, 2010 Autor Denunciar Share Postado Junho 4, 2010 e ai kuroi alguma novidade ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Junho 4, 2010 Denunciar Share Postado Junho 4, 2010 sacofritoxd, tentarei da uma olhada hj a noite ou no fim de semana, beleza?? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 sacofritoxd Postado Junho 4, 2010 Autor Denunciar Share Postado Junho 4, 2010 tranquilo cara Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Junho 7, 2010 Denunciar Share Postado Junho 7, 2010 (editado) olhai o q consegui pra vc:essex.rarEDITADO:usei um codigo muito muito ruim em c (tb porque não consigo fazer muito melhor) q to ate com vergonha de postar, mas se você quiser olhar, é esse aqui:#include <ostream>union numero{ double a; char b[8];};int main(void){ int cont = 0; unsigned char ch; bool inicio = false; FILE *fp; FILE *gravador; fp = fopen ("PDVPPROD.dat", "rb"); gravador = fopen("essex.txt", "wb"); int i, j, k; numero n; while (fscanf(fp, "%c", &ch) != EOF) { if (ch < 32 || ch == 127) { ch = ' '; } fprintf(gravador, "%c", ch); cont++; if (cont == 853) { fprintf(gravador, "%c", 13); fprintf(gravador, "%c", 10); inicio = true; cont = 0; } if (inicio) { if (cont == 64 || cont == 125 || cont == 198 || cont == 268) { if (cont == 64) { k = 3; } else if (cont == 125) { k = 1; } else if (cont == 198 || cont == 268) { k = 0; } for (j = 0; j <= k; j++) { for (i = 0; i <= 7; i++) { fscanf(fp, "%c", &(n.b[i])); } fprintf(gravador, "%10.2lf ", n.a); cont += 8; } } if (cont == 282) { fprintf(gravador, "%c", 13); fprintf(gravador, "%c", 10); cont = 0; } } } fclose(fp); fclose(gravador); return 0;}[/code] Editado Junho 7, 2010 por kuroi Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 sacofritoxd Postado Junho 7, 2010 Autor Denunciar Share Postado Junho 7, 2010 opa..obrigado kuroi...você me ajudou muito mesmo...abracao Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 sidnei_alves1 Postado Agosto 30, 2016 Denunciar Share Postado Agosto 30, 2016 Bom dia Sei que o tópico e antigo, mais algum poderia me ajudar, tenho um banco .DAT que foi criado em VB, mais não sei como pegar os dados dele para gerar um sql para jogar no firebird algum poderia me ajudar? posso ate pagar pela ajuda. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
sacofritoxd
Boa tarde
Tenho um banco de dados no formato '.dat'
mas não consigo abri-lo
apenas por bloco de notas e sai tudo misturado..
algm pode me ajudar a abrir?
já pesquisei sobre
mas não sei de onde ele veio e nem tenho cmo saber pois esse bd era de sistema antigo de um pessoal q está pra virar cliente nosso
e a empresa q fazia o sistema deles fechou .. enfim não tenho cmo saber como ele foi gerado
algm sabe se tem algum otro jeito de eu abrir esse bd com os dados alinhados?
um usuario de um outro fórum abriu um de 2 bd's q eu tenho em .dat
e me mandou os dados alinhados
link pra download desse arquivo
http://vbmania.com.br/pages/vbmdownload.ph...2&varTipo=1
Obrigado desde já
Link para o comentário
Compartilhar em outros sites
18 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.