Read data from files separated by commas in C

2

I need to read data from an entry in the format:

  

100, Refrigerator, 180,90,89,1200.00,4, white

After some search, I found the strtok function that separates the data between the commas, and the code looks like this:

#include <string.h>
#include <stdio.h>

int main(){
    const char s[2] = ",";
    char *token;
    char linha[90];
    char *result;

    FILE *arq;
    if((arq = fopen("eletro.txt", "r")) == NULL){
        printf("Erro ao abrir o arquivo.\n");
    }

   token = strtok(arq, s);

   while (!feof(arq)){
      result = fgets(linha, 90, arq);

      if (result) 
      token = strtok(result, s);


   while( token != NULL ){
        printf( " %s\n", token );
        token = strtok(NULL, s);
   }

  }
  fclose(arq);

    return(0);
}   

The output of this file is exactly the way I wanted it, but my question is: how to save this data in the format of the output in their respective vectors, divided as electro [i] .codigo, electro [i] .name ...) to the end, and do I need to read multiple rows of data? Or is there a simpler way to do this?

    
asked by anonymous 02.12.2014 / 05:14

2 answers

3

Here's a quick explanation on how to do it.

#include <string.h>
#include <stdio.h>

struct Eletro
{
    //os teus campos
};

struct Eletro eletro[100];

int main()
{
   const char s[2] = ",";
   char *token;
   char linha[90];
   char *result;

   FILE *arq;
   if((arq = fopen("eletro.txt", "r")) == NULL)
   {
       printf("Erro ao abrir o arquivo.\n");
   }
   token = strtok(arq, s);

   // se precisares do "i" para inserir em array basta inicializares aqui
   int i = 0;
   while (!feof(arq) && i<100) //para garantir que não passa do tamanho da lista.
   {
      result = fgets(linha, 90, arq);

      if (result) 
          token = strtok(result, s);

      //Alocas aqui a estrutura de dados para um elemento.
      int j = 0;
      while( token != NULL )
      {
        //Fazes aqui a tua inserção campo a campo no teu elemento. 
        // exemplo: 
        switch(j)
        {
            case 0:
                eletro[i].codigo = token;
                break; 
            case 1:
                eletro[i].nome = token;
                break; 
            //e continuas consoante os campos que tiveres
        }

        //Outro exemplo:
        // if( j==0 )
        //     eletro[i].codigo = token;
        //...

        printf( " %s\n", token );
        token = strtok(NULL, s);
        j++;
      }
      //passas aqui para o próximo elemento da tua lista.
      i++;
  }
  fclose(arq);

  return(0);
}

Ideone example

    
02.12.2014 / 15:09
0

A nice example of saving structures in files for reading ...

    struct suaEstrutura
    {
      char exemplo[50];

    };


    int main()

    {

    FILE *arquivo;
    struct suaEstrutura p;

    arquivo = fopen("seuDiretorio.txt", "a");

    printf("\ninforme seu exemplo: ");
    gets(p.exemplo);

    //Realizando escrita do tamanho de uma estrutura...
    fwrite(&p, sizeof(p), 1, arquivo);

    //explicando o que ta rolando no fwrite: 
    //ele atribui no arquivo, o endereço de p "com os dados", com o tamanho de p, e o contador.
    fclose(arquivo);



    }
    
05.12.2014 / 18:20