9511_project01

project 1 for algorithms & programming I (9511) prof. Cardozo
Index Commits Files Refs README
commit d59dcb03f6b9c55468c756c246ac281974c6c491
parent 240a4b713a3831f0b878062773044df8580769f0
Author: klewer-martin <martin.cachari@gmail.com>
Date:   Wed,  3 Feb 2021 17:02:19 -0300

Updated source code, finally writing into output file;

Diffstat:
Moutput.txt | 36++++++++++++++++++++++++++++++++++++
Mreadlines.c | 65++++++++++++++++++++++++++++++++++++++---------------------------
Mreadlines.h | 13++++---------
3 files changed, 78 insertions(+), 36 deletions(-)
diff --git a/output.txt b/output.txt
@@ -0,0 +1,36 @@
+Pais: Argentina
+Fecha: 01 Jan 2020
+Infectados: 2342
+
+Pais: Argentina
+Fecha: 10 Jan 2020
+Infectados: 4923
+
+Pais: Argentina
+Fecha: 15 Jan 2020
+Infectados: 9324
+
+Pais: Colombia
+Fecha: 01 Jan 2020
+Infectados: 8234
+
+Pais: Colombia
+Fecha: 10 Jan 2020
+Infectados: 9234
+
+Pais: Colombia
+Fecha: 15 Jan 2020
+Infectados: 9423
+
+Pais: Germany
+Fecha: 01 Jan 2020
+Infectados: 8432
+
+Pais: Germany
+Fecha: 15 Jan 2020
+Infectados: 9129
+
+Pais: Germany
+Fecha: 20 Jan 2020
+Infectados: 4214
+
diff --git a/readlines.c b/readlines.c
@@ -6,6 +6,9 @@
 
 #define COUNTRY_PROMPT "Pais"
 
+#define SIZE_OF_BUFF1    32
+#define SIZE_OF_BUFF2    32    
+
 const char date_print_format[] = "%d %b %Y";
 
 status_t readlines(char *src, char *dest)
@@ -14,11 +17,15 @@ status_t readlines(char *src, char *dest)
     status_t st;
 
 //    Puntero para el archivo de entrada y de salida respectivamente;    
-    FILE *fpi, *fpo;
+    FILE *fpi; 
+    FILE *fpo;
+
 
+    char buff1[SIZE_OF_BUFF1];
+    char buff2[SIZE_OF_BUFF2];
 
-    char buff1[] = "                          ";
-    char buff2[] = "                          ";
+    clean_buffer(buff1, SIZE_OF_BUFF1);
+    clean_buffer(buff2, SIZE_OF_BUFF2);
 
 //    Esta variable es para saber de que tipo de dato estamos hablando, si es un
 //    codigo de pais, una fecha o el numero de infectados;
@@ -41,15 +48,15 @@ status_t readlines(char *src, char *dest)
     if((fpi = fopen(src, "r")) == NULL)
             return ERROR_READING_FILE;
 
+    if((fpo = fopen(dest, "w")) == NULL)
+            return ERROR_READING_FILE;
 
 //    Lee de el archivo de entrada linea por linea y va guardando las 
 //    lineas en buff1 hasta que se terminen;
     for(line = 0; fgets(buff1, sizeof(buff1), fpi) != NULL; line++)
     {
-
 //    Este 'if' es para evitar la primer linea que no contiene ningun tipo de dato;
         if(line != 0) {
-
 //            Recorre el buff1 separando los datos de acuerdo a si es el codigo de
 //            un pais, una fecha o el numero de infectados;
             for(i = 0, j = 0, data = PAIS; buff1[i] != '\0'; i++)
@@ -58,8 +65,7 @@ status_t readlines(char *src, char *dest)
 //                Si encuentra una coma cambia el tipo de dato;
                 if((buff1[i] == ','))
                 {
-
-//                    Se incrementa i para evitar que sea guardado en algun lado;
+//                    Saltea la coma;                    
                     i++;
 
 //                    De acuerdo al tipo de dato que se guardo hasta llegar a la
@@ -71,9 +77,9 @@ status_t readlines(char *src, char *dest)
                     {
                         case PAIS: country = atoi(buff2); break;
                         case DATE: date = atol(buff2); j++; break;
-                        case INFECTED: infected = atol(buff2); break;
                     }
 
+
 //                    Como encontro una coma entonces el tipo de dato cambia;
                     data++;
 
@@ -82,7 +88,7 @@ status_t readlines(char *src, char *dest)
                     j = 0;
 
 //                    Se limpia el buffer ya que se va a volver a utilizar;
-                    clean_buffer(buff2);
+                    clean_buffer(buff2, SIZE_OF_BUFF2);
 
 
 //                Si en lugar de una coma se encuentra un caracter de nueva line 
@@ -99,6 +105,8 @@ status_t readlines(char *src, char *dest)
 //                    Si esta todo bien entonces el dato vuelve a ser PAIS que es 
 //                    el primer dato de el archivo de entrada
                     data = PAIS;
+                    infected = atol(buff2);
+                    clean_buffer(buff2, SIZE_OF_BUFF2);
                 }
 
                 switch(data) 
@@ -106,60 +114,63 @@ status_t readlines(char *src, char *dest)
                     case PAIS: buff2[i] = buff1[i];    break;
                     case DATE: buff2[j] = buff1[i]; j++; break;
                     case INFECTED: buff2[j] = buff1[i]; j++; break;
-
                 }
             }
-//            print_country(country, country_codes);
-//            print_date(date);
-//            print_infected(infected);
+            fprintf_country(fpo, country, country_codes);
+            fprintf_date(fpo, date);
+            fprintf_infected(fpo, infected);
         }
     }
 
     fclose(fpi);
+    fclose(fpo);
     return OK;
 }
 
 
 
-status_t print_country(size_t country_code, char country_codes[COUNTRIES_NUMBER][ARRAYS_LENGTH])
+status_t fprintf_country(FILE *dest, size_t country_code, char country_codes[COUNTRIES_NUMBER][ARRAYS_LENGTH])
 {
-    if(country_codes == NULL)
+    if((country_codes == NULL) || (dest == NULL))
         return ERROR_NULL_POINTER;
 
-    printf(COUNTRY_PROMPT": %s\n", country_codes[country_code]);
+    fprintf(dest, COUNTRY_PROMPT": %s\n", country_codes[country_code]);
     return OK;
 }
 
-status_t print_date(size_t date)
+status_t fprintf_date(FILE *dest, size_t date)
 {
     char time_c[TIME_MAX_DIGITS];
     status_t st;
 
+    if(dest == NULL)
+        return ERROR_NULL_POINTER;
+
     if((st = time_translator(date, time_c, sizeof(time_c))) != OK)
         return st;
 
-    printf("Fecha: %s\n", time_c);
-
+    fprintf(dest, "Fecha: %s\n", time_c);
     return OK;
 }
 
-status_t print_infected(size_t infected)
+status_t fprintf_infected(FILE *dest, size_t infected)
 {
-    printf("Infectados: %lu\n\n", infected);
+    if(dest == NULL)
+        return ERROR_NULL_POINTER;
 
+    fprintf(dest, "Infectados: %lu\n\n", infected);
     return OK;
 }
 
-status_t clean_buffer(char *buffer)
+status_t clean_buffer(char *buffer, size_t size)
 {
     if(buffer == NULL)
         return ERROR_NULL_POINTER;
 
-    while(*buffer != '\0')
-    {
-        (*buffer) = '\0';
-        buffer++;
-    }
+    size_t i;
+    for(i = 0; i < size; i++)
+        buffer[i] = '\0';
+    
     return OK;
 }
 
diff --git a/readlines.h b/readlines.h
@@ -4,14 +4,9 @@
 #include "main.h"
 #include "load_country_codes.h"
 
-#define INPUT_FILE_NAME "input.csv"
 #define INITIAL_SIZE 1000
 #define TIME_MAX_DIGITS 1000
 
-#define ARG "Argentina"
-#define COL "Colombia"
-#define GER "Germany"
-
 typedef enum {
     PAIS,
     DATE,
@@ -20,10 +15,10 @@ typedef enum {
 
 
 status_t readlines(char *src, char *dest);
-status_t print_date(size_t data);
-status_t print_infected(size_t data);
-status_t clean_buffer(char *buffer);
+status_t fprintf_date(FILE *dest, size_t data);
+status_t fprintf_infected(FILE *dest, size_t data);
+status_t clean_buffer(char *buffer, size_t size);
 status_t time_translator(time_t unix_time, char *res, size_t size); 
-status_t print_country(size_t country_code, char country_codes[COUNTRIES_NUMBER][ARRAYS_LENGTH]);
+status_t fprintf_country(FILE *dest, size_t country_code, char country_codes[COUNTRIES_NUMBER][ARRAYS_LENGTH]);
 
 #endif