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

Leitura de Arquivos texto C/C++


Flavio_Silva

Pergunta

Boa noite!

Pessoal, sei que gravação de dados fica melhor com arquivos binários, mais como é pra estudo preciso da seguinte ajuda:

Um exemplo de saída para o programa abaixo:

1;20150410;89;2;V;F
2;20150411;78;1;T;C

Todos os dados digitados e gravados são separados por " ; ", ou seja, de forma formatada, agora após a gravação e finalização do programa preciso de uma função que imprima na tela no formato abaixo as informações conforme segue:

CodigoNF =

DT_Emissao =

CodigoCliente =

QtdeItens =

CategoriaNota =

TipoFrete =

Se possível também uma outra função que me diga quantos registros tem no arquivo sendo que cada linha gravada representa 01 registro.

#include <stdio.h>
#include <stdlib.h>
 
     // um contador global para uso na função principal e booleana
      int cont = 0;
    
     // a struct citada
     struct st_Nota_Fiscal 
     {
           int CodigoNF;
           char DT_Emissao[10];
           int CodigoCliente;
           int QtdeItens;
           char CategoriaNota[1];
           char TipoFrete[1];
    };
 
    // criando a função booleana uma vez que estou trabalhando com c
    enum boolean
    {
          true = 1, false = 0
    }; typedef  enum boolean  Grava_dados;
 
  //a função de gravação com uso do contador global
  Grava_Dados (struct st_Nota_Fiscal pv_NotaFiscal[cont])
  {
         FILE *fp;    
          fp = fopen ("NF_010015.txt", "a");  
          if (fp == NULL)
          {    
               return (false);    
               exit(1);    
          }    
          else
          {    
                // usei o fprintf pois melhor se adaptou a gravação com o vetor pv_NotaFiscal.
                fprintf(fp,"%d;",pv_NotaFiscal[cont].CodigoNF);
                fprintf(fp,"%s;",pv_NotaFiscal[cont].DT_Emissao);
                fprintf(fp,"%d;",pv_NotaFiscal[cont].CodigoCliente); 
                fprintf(fp,"%d;",pv_NotaFiscal[cont].QtdeItens);
                fprintf(fp,"%s;",pv_NotaFiscal[cont].CategoriaNota);
                fprintf(fp,"%s;\n",pv_NotaFiscal[cont].TipoFrete);
                fclose (fp);
                printf ("\n\nDados Gravados com sucesso!\n\n");
          }       
  }
  
  // função principal usei o setbuf apenas para limpar o buffer do teclado e evitar erro na gravação
  int main ()
  {
          char op;
          do{
                struct st_Nota_Fiscal dados[cont];
                printf ("Digite o Codigo da NF: ");
                scanf ("%d", &dados[cont].CodigoNF);
                setbuf (stdin, NULL);
                printf ("Digite a data da emissao da NF [DD/MM/AAAA]: ");
                gets (dados[cont].DT_Emissao);
                setbuf (stdin, NULL);
                printf ("Digite o codigo do cliente: ");
                scanf ("%d", &dados[cont].CodigoCliente);
                setbuf (stdin, NULL);
                printf ("Digite a quantidade disponivel: ");
                setbuf (stdin, NULL);
                scanf ("%d", &dados[cont].QtdeItens);
                setbuf (stdin, NULL);
                printf ("Digite a categoria da NF [V] - Venda ou [T] - Transferencia: ");
                gets (dados[cont].CategoriaNota);
                setbuf (stdin, NULL);
                printf ("Digite o tipo do frete [C] - CIF ou [F] - FOB: ");
                gets (dados[cont].TipoFrete);
                setbuf (stdin, NULL);
                Grava_Dados (dados);
                cont = cont ++;
                printf ("\nDeseja gravar mais alguma NF: ");
                 scanf ("%c", &op);
          } while (op == 'S' || op == 's');
          printf ("\nPrograma finalizado com sucesso\n");
          return 0;
   }
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Bom dia voce pode criar um laco for para percorre até o final do arquivo e um fscanf suprimindo a entrada do ( ; ) e carregando o restando dos dados para as variaveis da sua struct EXEMPLO:


for(i=0; i < 20  && !feof(fp);i++){
      fscanf(arq,"%d;%[^;]s ",&sua struct[i].a variavel);
     }

Att.

Barao.

Editado por Barao
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...