Ir para conteúdo
Fórum Script Brasil
  • 0

Banco de datos formato .dat


sacofritoxd

Pergunta

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

  • 0

Boa tarde galera

já fiz um tópico mas parece que ninguém consegue me ajudar rsrsrs

agr to tentando fazer outra coisa

pegar todos dados dentro desse arquivo .dat e transferir para .txt

a minha funçao está assim

algm me ajuda a descobrir o porque ela só esta dando um loop e não faz realmente até estar vazio

Dim 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 Sub

só tem o form com 1 botao de comando qc hama a funçao eu

ai eu debugo e o sistema apenas passa uma vez pelo laço

Obrigado desde já

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

hum foi mal pelos tópicos repetidos

Mas como assim ele le o 0 e interpreta como fim de arquivo

ate 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

Link para o comentário
Compartilhar em outros sites

  • 0
Mas como assim ele le o 0 e interpreta como fim de arquivo

você 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 #2
End 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 #2
End Function

entretanto, 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.

Link para o comentário
Compartilhar em outros sites

  • 0

é, 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().

Link para o comentário
Compartilhar em outros sites

  • 0

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 fez

e na verdade tenho mais 2 bd's em formato .dat para fazer essa conversão

esse q postei no fórum e mais um de fornecedores

mas agradeço sua ajuda Kuroi.. espero sua resposta

Link para o comentário
Compartilhar em outros sites

  • 0

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 hsuashuahsa

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

olhai o q consegui pra vc:

essex.rar

EDITADO:

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 por kuroi
Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,7k
×
×
  • Criar Novo...