commit 3e543c6377d96162ac9de31ea729aaf5b391f2ae
parent 59c62735f12eb3c856905ce1ebf6471e54642be7
Author: klewer-martin <martin.cachari@gmail.com>
Date: Wed, 3 Feb 2021 13:46:38 -0300
Updated source code, now with more error printing on stderr, still left
improvements to do;
Diffstat:
7 files changed, 76 insertions(+), 9 deletions(-)
diff --git a/arguments.c b/arguments.c
@@ -12,6 +12,8 @@ status_t validate_arguments(int argc, char * argv[], char * src, char * dest)
{
if(argc == NO_CMD_ARGUMENTS)
return ERROR_INVOCATING_PROGRAM;
+ else if(argc == ONE_CMD_ARGUMENT)
+ return ERROR_INVOCATING_PROGRAM;
else if(argv == NULL)
return ERROR_NULL_POINTER;
diff --git a/data.c b/data.c
@@ -10,6 +10,24 @@ void print_error(status_t error)
case ERROR_NULL_POINTER:
fprintf(stderr, MSG_ERROR_NULL_POINTER"\n");
break;
+ case FILE_NOT_FOUND:
+ fprintf(stderr, MSG_FILE_NOT_FOUND"\n");
+ break;
+ case ERROR_LOADING_COUNTRY_CODES:
+ fprintf(stderr, MSG_ERROR_LOADING_COUNTRY_CODES"\n");
+ break;
+ case ERROR_PRINTING:
+ fprintf(stderr, MSG_ERROR_PRINTING"\n");
+ break;
+ case ERROR_READING_FILE:
+ fprintf(stderr, MSG_ERROR_READING_FILE"\n");
+ break;
+ case ERROR_ALLOCATING_TIME:
+ fprintf(stderr, MSG_ERROR_ALLOCATING_TIME"\n");
+ break;
+ case ERROR_DATA_ON_FILE_MISSING:
+ fprintf(stderr, MSG_ERROR_DATA_ON_FILE_MISSING"\n");
+ break;
default:
fprintf(stdin, MSG_OK"\n");
}
diff --git a/input.csv b/input.csv
@@ -1,5 +1,5 @@
PAIS, FECHA, INFECTADOS
-32,1577880000,2342
+32,1577880000
32,1578657600,4923
32,1579089600,9324
170,1577880000,8234
diff --git a/macros.h b/macros.h
@@ -2,6 +2,7 @@
#define MACROS_H
#define NO_CMD_ARGUMENTS 1
+#define ONE_CMD_ARGUMENT 2
#define MAX_CMD_ARGUMENTS 5
#define INPUT_ARGUMENT "-in"
@@ -13,11 +14,22 @@
"An unexpected error has occured during the execution\n"\
"of the program"
-#define MSG_ERROR_INVOCATING_PROGRAM "ERROR_INVOCATING_PROGRAM\n"\
+#define MSG_ERROR_INVOCATING_PROGRAM "\nERROR_INVOCATING_PROGRAM\n"\
"Usage:\t$ ./main -in <input file> -out <outputfile>\n"\
"\t$ ./main -out <output file -in <input file>\n"\
"Read documentation to know more"
-#define MSG_OK "Everything executed correctly"
+#define MSG_FILE_NOT_FOUND "No se ha encontrado dicho archivo\n"
+
+#define MSG_ERROR_LOADING_COUNTRY_CODES
+#define MSG_ERROR_PRINTING
+#define MSG_ERROR_READING_FILE
+#define MSG_ERROR_ALLOCATING_TIME
+#define MSG_ERROR_DATA_ON_FILE_MISSING "\nERROR_DATA_ON_FILE_MISSING\n"\
+ "En alguna linea de el archivo de entrada falta un dato,\n"\
+ "compruebe que dicho archivo no esta corrupto y ejecute\n"\
+ "el programa nuevamente"
+
+#define MSG_OK "Everything executed correctly\n"
#endif
diff --git a/main.c b/main.c
@@ -54,7 +54,10 @@ int main(int argc, char * argv[])
if(load_country_codes(country_codes) != OK)
return ERROR_LOADING_COUNTRY_CODES;
- readlines(src, dest);
+ if((st = readlines(src, dest)) != OK) {
+ print_error(st);
+ return st;
+ }
return OK;
}
diff --git a/main.h b/main.h
@@ -10,13 +10,14 @@
typedef enum {
OK,
+ FILE_NOT_FOUND,
ERROR_INVOCATING_PROGRAM,
ERROR_NULL_POINTER,
- FILE_NOT_FOUND,
ERROR_LOADING_COUNTRY_CODES,
ERROR_PRINTING,
ERROR_READING_FILE,
- ERROR_ALLOCATING_TIME
+ ERROR_ALLOCATING_TIME,
+ ERROR_DATA_ON_FILE_MISSING
} status_t;
#endif
diff --git a/readlines.c b/readlines.c
@@ -1,4 +1,5 @@
-// Lee el archivo de entrada
+// Lee el archivo de entrada y va separando los datos mientras va leyendo linea
+// por linea, y los va imprimiendo en pantalla
@@ -50,19 +51,49 @@ status_t readlines(char *src, char *dest)
{
// Si encuentra una coma cambia el tipo de dato;
- if((buff1[i] == ',') || (buff1[i] == '\n'))
+ if((buff1[i] == ','))
{
+
+// Se incrementa i para evitar que sea guardado en algun lado;
i++;
+
+// De acuerdo al tipo de dato que se guardo hasta llegar a la
+// coma va a guardarlo de distinta manera, ej: si el dato que
+// se guardo en buff2 era el codigo de un PAIS, entonces lo
+// guarda en la variable country, si el tipo de dato que se
+// guardo en buff2 era una fecha entonces lo guarda en date, etc;
switch(data)
{
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++;
+
+// j vale cero porque es el indice de el buffer en el que se van
+// guardando los datos;
j = 0;
+
+// Se limpia el buffer ya que se va a volver a utilizar;
clean_buffer(buff2);
- printf("data: %d\n", data);
+
+
+// Si en lugar de una coma se encuentra un caracter de nueva line
+// entonces significa que esta parado en el ultimo dato
+ } else if (buff1[i] == '\n') {
+
+// Si estamos parados en el ultimo dato y no es INFECTED,
+// entonces la variable datos no se incremento tres veces, por
+// lo cual se supone que falta un dato, devolviendo un codigo de
+// error;
+ if(data != INFECTED)
+ return ERROR_DATA_ON_FILE_MISSING;
+
+// Si esta todo bien entonces el dato vuelve a ser PAIS que es
+// el primer dato de el archivo de entrada
+ data = PAIS;
}
switch(data)