commit 240a4b713a3831f0b878062773044df8580769f0
parent ad691cdd65c10eaa6e10eb4b5fde585036b9d89c
Author: klewer-martin <martin.cachari@gmail.com>
Date: Wed, 3 Feb 2021 15:49:17 -0300
Updated source code, now having complete error print messages;
Diffstat:
8 files changed, 34 insertions(+), 20 deletions(-)
diff --git a/arguments.c b/arguments.c
@@ -22,19 +22,27 @@ status_t validate_arguments(int argc, char * argv[], char * src, char * dest)
inputFile = outputFile = IO_FILE_NOT_FOUND;
for(i = 1; i < argc; i++) {
+// Comprueba que el primer argumento sea INPUT_ARGUMENT ('-in');
if(!strcmp(argv[i], INPUT_ARGUMENT)) {
printf(INPUT_ARGUMENT_FOUND_MSG);
+
+// Si el argumento que sigue es OUTPUT_ARGUMENT entonces hay un error
+// en la invocacion de el programa;
if(!strcmp(argv[i + 1], OUTPUT_ARGUMENT))
return ERROR_INVOCATING_PROGRAM;
+// Si el primer argumento esta bien y el siguiente es una cadena entonces
+// guarda en src la cadena e imprime dicha cadena;
strcpy(src, argv[++i]);
printf(INPUT_FILE_NAME_MSG"'%s'\n", src);
+
+// Marca el archivo de entrada como encontrado;
inputFile = OK;
} else if(!strcmp(argv[i], OUTPUT_ARGUMENT)) {
printf(OUTPUT_ARGUMENT_FOUND_MSG);
if(!strcmp(argv[i + 1], INPUT_ARGUMENT))
-
return ERROR_INVOCATING_PROGRAM;
+
strcpy(dest, argv[++i]);
printf(OUTPUT_FILE_NAME_MSG"'%s'\n", argv[i]);
outputFile = OK;
@@ -43,7 +51,7 @@ status_t validate_arguments(int argc, char * argv[], char * src, char * dest)
// Return error if it could get input or output file names;
if((inputFile && outputFile) != OK)
- return ERROR_INVOCATING_PROGRAM;
+ return IO_FILE_NOT_FOUND;
return OK;
}
diff --git a/data.c b/data.c
@@ -1,18 +1,21 @@
#include "main.h"
#include "macros.h"
+
+// The switch below the order of the error must be in the same as "main.h"
+// status_t structure, in order to print the correct errors;
void print_error(status_t error)
{
switch (error) {
+ case IO_FILE_NOT_FOUND:
+ fprintf(stderr, MSG_IO_FILE_NOT_FOUND"\n");
+ break;
case ERROR_INVOCATING_PROGRAM:
fprintf(stderr, MSG_ERROR_INVOCATING_PROGRAM"\n");
break;
case ERROR_NULL_POINTER:
fprintf(stderr, MSG_ERROR_NULL_POINTER"\n");
break;
- case IO_FILE_NOT_FOUND:
- fprintf(stderr, MSG_IO_FILE_NOT_FOUND"\n");
- break;
case ERROR_LOADING_COUNTRY_CODES:
fprintf(stderr, MSG_ERROR_LOADING_COUNTRY_CODES"\n");
break;
diff --git a/load_country_codes.c b/load_country_codes.c
@@ -62,8 +62,9 @@ status_t load_country_codes(char country_codes[COUNTRIES_NUMBER][ARRAYS_LENGTH])
buff = malloc(INITIAL_SIZE);
- if((fp = fopen(COUNTRY_CODES_FILE_NAME, "r")) == NULL)
+ if((fp = fopen(COUNTRY_CODES_FILE_NAME, "r")) == NULL) {
return ERROR_LOADING_COUNTRY_CODES;
+ }
while(fgets(buff, INITIAL_SIZE, fp) != NULL) {
diff --git a/macros.h b/macros.h
@@ -22,10 +22,12 @@
#define MSG_IO_FILE_NOT_FOUND "\nIO_FILE_NOT_FOUND\n"\
"Un de los archivos de entrada o salida no se ha especificado"\
-#define MSG_ERROR_LOADING_COUNTRY_CODES "ERROR_LOADING_COUNTRY_CODES\n"\
- "Ha ocurrido un error al cargar los codigos de los paises\n"\
- "compruebe que el archivo \"iso3166-1.csv\" se encuentre\n"\
- "disponible en el directorio en el el programa ha sido ejecutado"
+#define MSG_ERROR_LOADING_COUNTRY_CODES "\nERROR_LOADING_COUNTRY_CODES\n"\
+ "Ha ocurrido un error al cargar los codigos de los paises.\n"\
+ "compruebe que el archivo \""COUNTRY_CODES_FILE_NAME"\" se encuentre\n"\
+ "disponible en el directorio de el programa ejecutado y que\n"\
+ "el nombre coincida con el de \"COUNTRY_CODES_FILE_NAME\" dentro\n"\
+ "de el archivo main.h\n"
#define MSG_ERROR_PRINTING
diff --git a/main.c b/main.c
@@ -47,11 +47,10 @@ int main(int argc, char * argv[])
return st;
}
-
// Carga los codigos de error de los paises de acuerdo al standard iso3166 en el
// arreglo mencionado previamente 'country_codes', en caso de haber algun error
// en el proceso devuelve dicho codigo e impreme por stderr un mensaje de error;
- if(st = (load_country_codes(country_codes)) != OK) {
+ if((st = load_country_codes(country_codes)) != OK) {
print_error(st);
return ERROR_LOADING_COUNTRY_CODES;
}
diff --git a/main.h b/main.h
@@ -6,7 +6,7 @@
#include <string.h>
#include <time.h>
-#define COUNTRY_CODES_FILE_NAME "iso3166-1_numbers_and_countries.csv"
+#define COUNTRY_CODES_FILE_NAME "iso3166-1.csv"
typedef enum {
OK,
diff --git a/output.csv b/output.txt
diff --git a/readlines.c b/readlines.c
@@ -13,8 +13,9 @@ status_t readlines(char *src, char *dest)
size_t line, i, j;
status_t st;
-// Puntero para el archivo de entrada;
- FILE *fp;
+// Puntero para el archivo de entrada y de salida respectivamente;
+ FILE *fpi, *fpo;
+
char buff1[] = " ";
char buff2[] = " ";
@@ -32,18 +33,18 @@ status_t readlines(char *src, char *dest)
// Carga los datos al arreglo mencionado previamente, en caso de haber algun
// error devuelve el codigo de dicho error;
- if((st = load_country_codes(country_codes)) != OK)
+ if((st = load_country_codes(country_codes)) != OK)
return st;
-
+
// Abre el archivo de entrada en modo lectura si por algun motivo no se puede
// abrir devuelve un codigo de error;
- if((fp = fopen(src, "r")) == NULL)
+ if((fpi = fopen(src, "r")) == 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), fp) != NULL; line++)
+ 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;
@@ -114,7 +115,7 @@ status_t readlines(char *src, char *dest)
}
}
- fclose(fp);
+ fclose(fpi);
return OK;
}