Ler dados de arquivos separados por vírgulas em C – c arquivo

Pergunta:


Preciso ler os dados de uma entrada no formato:

100,Geladeira,180,90,89,1200.00,4,branca

Depois de algumas pesquisas, encontrei a função strtok que separa os dados entre as vírgulas, e o código ficou da seguinte forma:

#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( " %sn", token );
        token = strtok(NULL, s);
   }

  }
  fclose(arq);

    return(0);
}   

A saída desse arquivo está exatamente do jeito que eu queria, mas minha pergunta é: como salvar esses dados no formato da saída em seus respectivos vetores, divididos da forma eletro[i].codigo, eletro[i].nome (…) até o fim, sendo que preciso ler várias linhas de dados? Ou ainda, há uma maneira mais simples de fazer isso?

Autor da pergunta Moni

Resposta :

Tens aqui uma pequena explicação no código de como fazer.

#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( " %sn", token );
        token = strtok(NULL, s);
        j++;
      }
      //passas aqui para o próximo elemento da tua lista.
      i++;
  }
  fclose(arq);

  return(0);
}

Exemplo ideone

um exemplo bacana de como salvar estruturas em arquivos para leitura…

    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);



    }

Fonte

Related Posts:

Qual a diferença entre AppCompatActivity e Activity? – android android-activity
Pergunta: Qual a diferença da AppCompatActivity para Activity ? A partir de qual versão a AppCompatActivity foi adicionada ao Android? Autor da pergunta Luhhh A diferença reside ...
Como abreviar palavras em PHP? – php string
Pergunta: Possuo informações comuns como nome de pessoas e endereços, e preciso que elas contenham no máximo 30 caracteres sem cortar palavras. Exemplo: 'Avenida Natalino João Brescansin' ...
Qual é a finalidade de um parêntese vazio numa declaração Lambda? – c# expressões-lambda característica-linguagem
Pergunta: Criei um exemplo de uma declaração Lambda sem argumentos, entretanto, estou com duvidas referente a omissão do parêntese vazio () na declaração. Veja o exemplo: class ...
Boas práticas para URI em API RESTful – api rest restful
Pergunta: Estou com dúvida em relação às URIs de alguns recursos da api que estou desenvolvendo. Tenho os recursos projetos e atividades com relação 1-N, ...
Dúvidas sobre a integração do MySQL com Java – java mysql netbeans
Pergunta: Estou criando um sistema no NetBeans, utilizando a linguagem Java e o banco de dados MySQL. Escrevi o seguinte código para realizar a conexão ...
Qual é a finalidade da pasta Model do framework Inphinit? – php inphinit
Pergunta: No Inphinit micro-framework existe a pasta Model que fica dentro da pasta application, e nela é onde ficam as classes, mas eu estou muito ...
Uso do ‘@’ em variáveis – javascript typescript coffeescript
Pergunta: Vejo em algumas linguagens que compilam para javascript, como TypeScript e CoffeeScript, o uso do @ em variáveis, como também, casos em que o ...
Qual tamanho máximo um arquivo JSON pode ter? – json arquivo
Pergunta: Vou dar um exemplo para conseguir explicar minha duvida: Preciso recuperar informação de imagens vindas de uma API, esse banco de imagens me retorna JSON's ...
O que é Teste de Regressão? – terminologia engenharia-de-software testes
Pergunta: Na matéria de Teste de Software o professor abordou um termo chamado Teste de Regressão, isto dentro da disciplina de teste de software. Sendo ...
O que é um construtor da linguagem? – php característica-linguagem
Pergunta: Em PHP, já li e ouvi várias vezes a respeito dos Construtores da Linguagem. Os casos que sempre ouvi falar deles foi em casos ...
Função intrínseca para converter numérico para string – cobol
Pergunta: Estou a tentar saber se existe alguma função intrínseca do COBOL para converter um data numérico para string sem precisar usar a cláusula REDEFINES: ( ...
Porque usar implements? – java android
Pergunta: Qual a diferença entre usar btn.setOnClickListener(new OnClickListener() { e public class MainActivity extends Activity implements OnClickListener{ Estive fazendo um curso de Android e meu professor falou que ...
O que é XHTML e quando deve ser usado? – html xml xhtml
Pergunta: O que eu sei é que o XHTML precisa ser XML válido. Isso implica, por exemplo, que todas as tags precisam ser fechadas. Por ...
Uma placa aceleradora de vídeo pode melhorar o desempenho não-gráfico? [fechada] – desempenho
Pergunta: Para desenvolver em Ruby on Rails, eu utilizo aqui uma máquina virtual do VirtualBox com Ubuntu Server 14.04 sem interface gráfica instalada. Recentemente descobri uma ...
Concat() VS Union() – c# .net
Pergunta: Qual a diferença entre Concat() e Union() ? Quando usar Concat() e quando usar Union() ? Somente pode ser usado em list ? ...

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *