9511_project01

project 1 for algorithms & programming I (9511) prof. Cardozo
Index Commits Files Refs README
read_file.c (1536B)
   1 
   2 #include "read_file.h"
   3 
   4 
   5 status_t read_file(FILE *src, uint *country, uint *date, uint *infected)
   6 {
   7 
   8 //    Esta variable es para saber de que tipo de dato estamos hablando, si es un
   9 //    codigo de pais, una fecha o el numero de infectados;
  10     data_t data;
  11 
  12     size_t i, j;
  13 //    status_t st;
  14 
  15     char buff1[SIZE_OF_BUFF1];
  16     char buff2[SIZE_OF_BUFF2];
  17 
  18     clean_buffer(buff1, SIZE_OF_BUFF1);
  19     clean_buffer(buff2, SIZE_OF_BUFF2);
  20 
  21 //    char time_s[TIME_MAX_DIGITS];
  22 
  23 //    Lee de el archivo de entrada linea por linea y va guardando las 
  24 //    lineas en buff1 hasta que se terminen;
  25     if(fgets(buff1, sizeof(buff1), src) == NULL)
  26         return END_OF_INPUT_FILE;
  27     
  28 //    Este 'if' es para evitar la primer linea que no contiene ningun
  29 //    tipo de dato;
  30     for(i = 0, j = 0, data = PAIS; buff1[i] != '\0'; i++)
  31     {
  32         if((buff1[i] == ','))
  33         {
  34             i++;
  35             if(data == PAIS) 
  36                 *(country) = atoi(buff2);
  37             
  38             else if (data == DATE) 
  39                 *(date) = atoi(buff2);
  40             
  41             data++;
  42             j = 0;
  43             clean_buffer(buff2, SIZE_OF_BUFF2);
  44 
  45         } else if (buff1[i] == '\n') {
  46             if(data != INFECTED) 
  47                 return ERROR_DATA_ON_FILE_MISSING;
  48 
  49             data = PAIS;
  50             *(infected) = atoi(buff2);
  51             clean_buffer(buff2, SIZE_OF_BUFF2);
  52         }
  53             switch(data) 
  54             {
  55                 case PAIS: buff2[i] = buff1[i];    break;
  56                 case DATE: buff2[j] = buff1[i]; j++; break;
  57                 case INFECTED: buff2[j] = buff1[i]; j++; break;
  58             }
  59     }
  60     return OK;
  61 }
  62 
  63 status_t clean_buffer(char *buffer, size_t size)
  64 {
  65     if(buffer == NULL)
  66         return ERROR_NULL_POINTER;
  67 
  68     size_t i;
  69     for(i = 0; i < size; i++)
  70         buffer[i] = '\0';
  71     
  72     return OK;
  73 }