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

C - Binário


SliDers

Pergunta

Ola, amigos ...

Meu conhecimento em manuseio de arquivos binário em C, é pouco... Se puderem me ajudar com um problema que estou tendo ... Agradeço desde já.

O trabalho consiste em armazenar no arquivo informações de um simples cadastro, no entanto devo manter apenas um registro por vez em memória ...

Neste contexto utilizei uma estrutura com cabeçalho no inicio do arquivo e os registro, após o mesmo.

No cabeçalho tenho o dado da próxima chave do próximo registro a ser inserido e o primeiro registro excluído.

No registro além das informações de inserção, tenho um campo de próximo item excluído.

O uso seria assim:

Ao acessar o arquivo o programa e identificar dados nele, o programa captura o cabeçalho. Através dele pega a chave e se existir algum item excluído deve colocar o novo registro sobre o já excluído, caso contrário colocar o registro no final do arquivo.

O meu problema é que não estou conseguindo parar na posição do registro, por exemplo:

cabeçalho| Registro 1|Registro 2| Registro 3

Não consegui ir ate o Registro 2 ler ele, e mais tarde sobrepor o dado dele ...

Queria uma idéia (exemplo) de como posso navegar entre os dados, ler e sobrepor a informação. Desculpe se compliquei a explicação.

Obrigado, pela atenção.

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Vou colocar a parte que mencionei acima (inserção):

void insereregistro(){
    char   fim,grava,*valida;
    double aux_cod=0;
    double aux_cod2=0;
    double stt = 0;
    double n=0;
    // le e insere mais elementos no arquivo
    aluno.proxExc = 0;

     do{
        limpatela(6,23);
        gotoxy(5,5);
        printf("********* Insere Registros *********");
        gotoxy(5,6);
        printf("Codigo do aluno:");
        gotoxy(5,7);
        printf("Nome do Aluno:");
        gotoxy(5,8);
        printf("Curso:");
        gotoxy(5,9);
        printf("Data Nascimento:");
        gotoxy(5,10);
        printf("Logradouro:");
        gotoxy(5,11);
        printf("Cidade:");
        gotoxy(5,12);
        printf("Telefone:");
        gotoxy(5,13);
        printf("Nome Pai:");
        gotoxy(5,14);
        printf("Nome Mae:");
        gotoxy(5,15);
        printf("Carne:");

        //le cabecalho
        fseek(arq_dados, SEEK_SET, 0);
        fread(&cabecalho,sizeof(cabecalho),1,arq_dados);

        aluno.codigo = cabecalho.codigo;
        gotoxy(22,6);
        printf("%1.0lf",aluno.codigo);
        cabecalho.primeiroExcluido=2;
        if (cabecalho.primeiroExcluido!=0){
            aux_cod = aluno.codigo;
            fseek(arq_dados,sizeof(aluno), SEEK_END);
            n=(ftell(arq_dados)/sizeof(aluno)-(cabecalho.primeiroExcluido+1));

            fseek(arq_dados,n*sizeof(aluno), SEEK_CUR);
            fread(&aluno, sizeof(aluno),1,arq_dados);
        if (aluno.proxExc!=0){
            stt = 1;
            aluno.codigo = aux_cod;
            aux_cod2     = cabecalho.primeiroExcluido;
            cabecalho.primeiroExcluido = aluno.proxExc;
            cabecalho.codigo = aluno.codigo;
            fseek(arq_dados, SEEK_SET, 0);
            fwrite(&cabecalho, sizeof(cabecalho),1, arq_dados);
              }else{
                  aluno.codigo = aux_cod;
              }
        }
        //gets(aluno.codigo);
        gotoxy(20,7);
        gets(aluno.nome);
        gotoxy(12,8);
        gets(aluno.curso);
        gotoxy(22,9);
        gets(aluno.dtnasc);
        gotoxy(17,10);
        gets(aluno.logradouro);
        gotoxy(13,11);
        gets(aluno.cidade);
        gotoxy(15,12);
        gets(aluno.telefone);
        gotoxy(15,13);
        gets(aluno.nomepai);
        gotoxy(15,14);
        gets(aluno.nomemae);
        gotoxy(15,15);
        printf("<S - sim N - não>");
        do{
            gotoxy(12,15);
            *valida=toupper(getche());
            if (*valida=='S' || *valida=='N')
                strcpy(aluno.carne,valida);
        }while(*valida!='S' && *valida!='N');
        do{
            do{
                gotoxy(5,17);
                printf("Confirma gravacao dos dados <S - sim N - não>");
                grava = toupper(getch());
                if(grava== 'S'){
                    cabecalho.codigo++;
                    fseek(arq_dados, SEEK_SET, 0);

                    fwrite(&cabecalho, sizeof(cabecalho),1, arq_dados);


                     if (stt!=0){
                      //insere por cima do reg excluido
                      aluno.proxExc=0;
                      fseek(arq_dados, SEEK_SET,aux_cod2);
                      fwrite(&aluno, sizeof(aluno),1,arq_dados);

                     }else{
                      aluno.proxExc = 0;
                        fseek(arq_dados,0,SEEK_END);
                        fwrite(&aluno, sizeof(aluno),1, arq_dados);
                       }
                      //fwrite("\r\n", sizeof("\n"),1, arq_dados);
                  
                  //fseek(arq_dados, SEEK_SET, 0);
                  //// insere cabecalho                                
                  //fwrite(&cabecalho, sizeof(cabecalho),1, arq_dados);
                  
                }else{
                    if (aluno.proxExc!=0){
                      cabecalho.primeiroExcluido = aux_cod2;
                      fseek(arq_dados, SEEK_SET, 0);                     
                      fwrite(&cabecalho, sizeof(cabecalho),1, arq_dados);
                   }                                                     
                    }
                      stt=0;
            }while(grava!='S' && grava!='N');
            limpatela(17,17);
            gotoxy(5,17);
            printf("Deseja continuar <S - sim N - não>");
            fim = toupper(getch());
        }while(fim!='S' && fim!='N');
     }while (fim!='N');
}

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,3k
    • Posts
      652,3k
×
×
  • Criar Novo...