Jump to content
Fórum Script Brasil
  • 0

Leitura de Arquivos texto C/C++


Flavio_Silva
 Share

Question

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 to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 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.

Edited by Barao
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.7k
×
×
  • Create New...