9511_project01

project 1 for algorithms & programming I (9511) prof. Cardozo
Index Commits Files Refs README
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:
Marguments.c | 12++++++++++--
Mdata.c | 9++++++---
Mload_country_codes.c | 3++-
Mmacros.h | 10++++++----
Mmain.c | 3+--
Mmain.h | 2+-
Routput.csv -> output.txt | 0
Mreadlines.c | 15++++++++-------
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;
 }