Guest User

Untitled

a guest
May 21st, 2018
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.65 KB | None | 0 0
  1. /*
  2.  * main.c
  3.  *
  4.  *  Created on: 9 de Jan de 2012
  5.  *      Author: tiago
  6.  */
  7.  
  8. #include <stdio.h>
  9. #include "lapr3.h"
  10. #include <string.h>
  11. #include <stdlib.h>
  12.  
  13. typedef struct
  14. {
  15.     int num;
  16.     char nome[100];
  17.     int categorias;
  18. } Funcionario;
  19.  
  20. void carregaCategoriasAnteriores(Funcionario *ptrFuncionario, char *array);
  21. void carregaCategoriaActual(Funcionario *ptrFuncionario,char *array);
  22. int leFicheiro(char *filename,Funcionario *ptrFuncionario, int size);
  23.  
  24. int leFicheiro(char *filename, Funcionario *ptrFuncionario, int size)
  25. {
  26.     int count=0;
  27.     FILE *ficheiro = fopen(filename,"r");
  28.     if(ficheiro!=NULL)
  29.     {
  30.         int aux=0;
  31.         char linha[128];
  32.         char charAux[3]={0,0,0};
  33.         while ( fgets ( linha, sizeof linha, ficheiro ) != NULL )
  34.         {
  35.             while(aux<4)
  36.             {
  37.                 if(count == size)
  38.                 {
  39.                     size+=15;
  40.                     ptrFuncionario=(Funcionario*) realloc(ptrFuncionario,(size*sizeof(Funcionario)));
  41.                 }
  42.  
  43.                 switch (aux)
  44.                 {
  45.                 case 0 : strcpy(charAux,strtok(linha, "," ));
  46.                          (ptrFuncionario+count)->num=atoi(charAux);
  47.                          break;
  48.                 case 1 : strcpy((ptrFuncionario+count)->nome,strtok(NULL, ","));
  49.                          break;
  50.                 case 2 : strcpy(charAux,strtok(NULL, "," ));
  51.                          carregaCategoriaActual((ptrFuncionario+count),charAux);
  52.                          break;
  53.                 case 3 : carregaCategoriasAnteriores((ptrFuncionario+count),strtok(NULL,","));
  54.                          break;
  55.                 }
  56.                 aux++;
  57.             }
  58.             aux=0;
  59.             count++;
  60.         }
  61.         fclose ( ficheiro );
  62.     }
  63.     return count;
  64. }
  65.  
  66. void carregaCategoriasAnteriores(Funcionario *ptrFuncionario, char *array)
  67. {
  68.     int size=5;
  69.     int *arrayCategorias = NULL;
  70.     int i=0,j=0;
  71.     arrayCategorias=(int*) malloc(size*sizeof(int));
  72.     i=0;
  73.     while(array[i]!='\n')
  74.     {
  75.  
  76.         if(array[i]!='-')
  77.         {
  78.             *(arrayCategorias+j)=(array[i]-48);
  79.             j++;
  80.             i++;
  81.         }else
  82.         {
  83.             i=i+2;
  84.         }
  85.     }
  86.     int k,l,aux=1;
  87.     for(k=0;k<j;k++)
  88.     {
  89.         for(l=1;l<(*(arrayCategorias+k)) && (*(arrayCategorias+k))!=1;l++)
  90.         {
  91.             aux=aux<<1;
  92.         }
  93.         ptrFuncionario->categorias=ptrFuncionario->categorias | aux;
  94.         aux=1;
  95.     }
  96.     free(arrayCategorias);
  97. }
  98.  
  99. void carregaCategoriaActual(Funcionario *ptrFuncionario, char *array)
  100. {
  101.     ptrFuncionario->categorias=1;
  102.     ptrFuncionario->categorias=ptrFuncionario->categorias<<(atoi(array)-1);
  103. }
  104.  
  105. int main()
  106. {
  107.     int size=3;
  108.     Funcionario *ptrFuncionario, funcionarios[size];
  109.     char ficheiro[]="/home/tiago/Dropbox/LAPR III 1112/P4.2/LAPR3/dados.csv";
  110.     char *ptrFicheiro;
  111.     ptrFicheiro=ficheiro;
  112.     ptrFuncionario=funcionarios;
  113.     leFicheiro(ptrFicheiro,ptrFuncionario,size);
  114.     int i;
  115.     for(i=0;i<3;i++)
  116.     {
  117.         printf("Numero: %d\nNome: %s\nCategorias: %d\n\n",ptrFuncionario[i].num,ptrFuncionario[i].nome,ptrFuncionario[i].categorias);
  118.     }
  119.     return 0;
  120. }
Add Comment
Please, Sign In to add comment