commit ad17a09d8bd8fbb023416636024f43e076d4ff09
parent 64040f84ff4df9058738427b9c22ab636edcfbed
Author: klewer-martin <martin.cachari@gmail.com>
Date: Thu, 11 Feb 2021 02:11:29 -0300
Update;
Diffstat:
4 files changed, 46 insertions(+), 48 deletions(-)
diff --git a/Makefile b/Makefile
@@ -1,5 +1,5 @@
CC = gcc
-CFLAGS = -std=c99 -Wall -pedantic
+CFLAGS = -std=c99 -Wall -Wextra -pedantic
all: main clean
diff --git a/load_country_codes.c b/load_country_codes.c
@@ -1,46 +1,11 @@
-// Carga en memoria los codigos de los paises de el archivo de nombre
-// "COUNTRY_CODES_FILE_NAME" definido en macros.h y devuelve un puntero
-// a dicho arreglo con los codigos cargados;
+// Carga en el arreglo 'country_codes' los codigos de los paises de el archivo
+// de nombre "COUNTRY_CODES_FILE_NAME" (definido en macros.h) ubicado en el
+// directorio desde el que se ejecuta el programa;
#include "load_country_codes.h"
-status_t clean (char *buffer, size_t size)
-{
- size_t i;
- i = 0;
-
- if(buffer == NULL)
- return ERROR_NULL_POINTER;
-
- while(i < size) {
- buffer[i] = '\0';
- i++;
- }
- return OK;
-}
-
-// Inicializa el arreglo alocando el caracter '\0' en todas las posiciones;
-status_t empty_country_codes(char country_codes[COUNTRIES_NUMBER][ARRAYS_LENGTH])
-{
- size_t i, j;
- for(i = 0; i < COUNTRIES_NUMBER; i++)
- for(j = 0; j < (ARRAYS_LENGTH - 1); j++) {
- country_codes[i][j] = '\0';
-
- country_codes[i][ARRAYS_LENGTH - 1] = '\n';
- }
-
- return OK;
-}
-
-
-// Abre el archivo "COUNTRY_CODES_FILE_NAME" y lee linea por linea hasta llegar
-// al final, mientras lee lo va guardando en un buffer que recorre caracter por
-// caracter en busqueda de el character separador de datos, en este caso ',',
-// mientras recorre el buffer va separando los datos y los guarda en la variable
-// que corresponda;
status_t load_country_codes(char country_codes[COUNTRIES_NUMBER][ARRAYS_LENGTH])
{
FILE *fp;
@@ -48,8 +13,8 @@ status_t load_country_codes(char country_codes[COUNTRIES_NUMBER][ARRAYS_LENGTH])
empty_country_codes(country_codes);
char *buff;
- char buff_2[INITIAL_SIZE];
- buff_2[INITIAL_SIZE] = '\0';
+ char buff2[INITIAL_SIZE];
+ buff2[INITIAL_SIZE] = '\0';
int country_code;
char country_name[INITIAL_SIZE];
@@ -58,7 +23,7 @@ status_t load_country_codes(char country_codes[COUNTRIES_NUMBER][ARRAYS_LENGTH])
size_t i, j;
part_t part;
- buff = malloc(INITIAL_SIZE);
+ buff = (char *)malloc(INITIAL_SIZE);
if((fp = fopen(COUNTRY_CODES_FILE_NAME, "r")) == NULL) {
return ERROR_LOADING_COUNTRY_CODES;
@@ -78,12 +43,12 @@ status_t load_country_codes(char country_codes[COUNTRIES_NUMBER][ARRAYS_LENGTH])
switch(part)
{
- case CODE: buff_2[i] = *(buff + i); break;
+ case CODE: buff2[i] = *(buff + i); break;
case NAME: country_name[j] = *(buff + i); j++; break;
}
}
- country_code = atoi(buff_2);
- clean(buff_2, INITIAL_SIZE);
+ country_code = atoi(buff2);
+ clean(buff2, INITIAL_SIZE);
strcpy(country_codes[country_code], country_name);
}
@@ -93,3 +58,32 @@ status_t load_country_codes(char country_codes[COUNTRIES_NUMBER][ARRAYS_LENGTH])
return OK;
}
+
+status_t clean (char *buffer, size_t size)
+{
+ size_t i;
+ i = 0;
+
+ if(buffer == NULL)
+ return ERROR_NULL_POINTER;
+
+ while(i < size) {
+ buffer[i] = '\0';
+ i++;
+ }
+ return OK;
+}
+
+// Inicializa el arreglo alocando el caracter '\0' en todas las posiciones;
+status_t empty_country_codes(char country_codes[COUNTRIES_NUMBER][ARRAYS_LENGTH])
+{
+ size_t i, j;
+ for(i = 0; i < COUNTRIES_NUMBER; i++)
+ for(j = 0; j < (ARRAYS_LENGTH - 1); j++) {
+ country_codes[i][j] = '\0';
+
+ country_codes[i][ARRAYS_LENGTH - 1] = '\n';
+ }
+
+ return OK;
+}
diff --git a/macros.h b/macros.h
@@ -9,7 +9,7 @@
#define OUTPUT_ARGUMENT "-out"
#define INITIAL_SIZE 1000
-
+#define MAX_NAME_LENGTH 32
typedef unsigned int uint;
typedef unsigned long ulong;
diff --git a/main.c b/main.c
@@ -11,7 +11,8 @@
// Lee texto de un archivo con extension .csv cuyo nombre recibe
// como argumento; el cual contiene solo numeros que representan
// un pais, una fecha y una cantidad de infectados y lo guarda en
-// un archivo de texto cuyo nombre tambien recibe como argumento.
+// un archivo de texto cuyo nombre tambien recibe como argumento
+// con un formato humanamente entendible.
#include "main.h"
@@ -29,7 +30,7 @@ int main(int argc, char * argv[])
// Las siguientes variables son para guardar los nombres de los archivos de
// entrada y salida luego de validar los argumentos
- char src[32], dest[32];
+ char src[MAX_NAME_LENGTH], dest[MAX_NAME_LENGTH];
FILE *fpi, *fpo;
uint country, date, infected;
@@ -77,6 +78,8 @@ int main(int argc, char * argv[])
}
}
+
+// Si hubo algun error al leer o escribir el archivo va a imprimir un error
if((st != OK) && (st != END_OF_INPUT_FILE)) {
fclose(fpi);
fclose(fpo);
@@ -84,6 +87,7 @@ int main(int argc, char * argv[])
return st;
}
+// El la ultima linea de 'infectados por mes'
fprintf_infected_monthly(fpo);
fclose(fpi);