9511_project03

Command line program that parses a bank .csv file and generates and output file in format .csv or .xml containing the debits and credits of every user.
Index Commits Files Refs README LICENSE
commit 6b416dc25a00a138a8d458d092ec067917d62755
parent 3ae4b956f9251c372ff86f743afb905df7ef47ae
Author: klewer-martin <martin.cachari@gmail.com>
Date:   Thu, 29 Jul 2021 12:59:57 -0300

Update:

Diffstat:
Msource/main.c | 29+++++++++++++++++++++--------
Dsource/main.c_orig | 182-------------------------------------------------------------------------------
2 files changed, 21 insertions(+), 190 deletions(-)
diff --git a/source/main.c b/source/main.c
@@ -30,6 +30,7 @@ int main (int argc, char *argv[])
     /* Valida que los argumentos sean correctos y asigna valores a cla */
     if((st = validate_arguments(argc, argv, cla)) != OK) {
         show_status(st);
+        cla_destroy(cla);
         return st;
     }
 
@@ -129,14 +130,26 @@ int main (int argc, char *argv[])
         return st;
     }
 
-    /* Imprime el vector con los usuarios */
-    if((st = ADT_Vector_export_as_xml(v, stdout, user_print_as_xml)) != OK) {
-        show_status(st);
-        free(user_tmp);
-        cla_destroy(cla);
-        ADT_Vector_destroy(&v);
-        array_destroy(data, IN_FILE_FIELDS);
-        return st;
+    /* Imprime el vector con los usuarios de acuerdo al argumento recibido */
+    if(!strcmp(cla->fmt, "xml")) {
+        if((st = ADT_Vector_export_as_xml(v, cla->fo, user_print_as_xml)) != OK) {
+            show_status(st);
+            free(user_tmp);
+            cla_destroy(cla);
+            ADT_Vector_destroy(&v);
+            array_destroy(data, IN_FILE_FIELDS);
+            return st;
+        }
+    }
+    else if(!strcmp(cla->fmt,"csv")) {
+        if((st = ADT_Vector_export_as_csv(v, cla->fo, user_print_as_csv)) != OK) {
+            show_status(st);
+            free(user_tmp);
+            cla_destroy(cla);
+            ADT_Vector_destroy(&v);
+            array_destroy(data, IN_FILE_FIELDS);
+            return st;
+        }
     }
 
     free(user_tmp);
diff --git a/source/main.c_orig b/source/main.c_orig
@@ -1,182 +0,0 @@
-#include "../include/io.h"
-#include "../include/cla.h"
-#include "../include/user.h"
-#include "../include/sort.h"
-#include "../include/status.h"
-#include "../include/vector.h"
-
-#define BUFFER_INIT_SIZE    100
-#define INPUT_FILE_DELIM    ","
-#define INPUT_FILE_FIELDS    6    
-
-int main (int argc, char *argv[])
-{
-    status_t st;
-    cla_t cla;
-    ADT_Vector_t *v;
-    user_t user;
-    char *b, *endptr;
-    char **data;
-    size_t i, j;
-    FILE *fi;
-    long id, amount;
-    void *up;
-
-    user = NULL;
-
-    /* Valida que los argumentos sean correctos */
-    if((st = validate_arguments(argc, argv)) != OK) {
-        show_status(st);
-        return st;
-    }
-
-    ADT_Vector_set_comparator(v, user_id_equal);
-
-    /* Asigna memoria a cla */
-    if((st = cla_create(&cla)) != OK) {
-        show_status(st);
-        return st;
-    }
-
-    /* Crea un vector */
-    if((st = ADT_Vector_create(&v)) != OK) {
-        show_status(st);
-        cla_destroy(&cla);
-        return st;
-    }
-
-    if((st = ADT_Vector_set_printer(v, user_printer)) != OK) {
-        show_status(st);
-        cla_destroy(&cla);
-        ADT_Vector_destroy(&v);
-        return st;
-    }
-
-    /* Asigna a la estructura 'cla' los argumentos ingresados */
-    if((st = cla_setup(argc, argv, &cla)) != OK) {
-        show_status(st);
-        cla_destroy(&cla);
-        ADT_Vector_destroy(&v);
-        return st;
-    }
-
-
-    b = calloc(sizeof(char), BUFFER_INIT_SIZE);
-    data = malloc(sizeof(char *) * INPUT_FILE_FIELDS);
-
-    if(b == NULL || data == NULL) {
-        free(b);
-        show_status(ERROR_MEMORY);
-        cla_destroy(&cla);
-        ADT_Vector_destroy(&v);
-        return ERROR_MEMORY;
-    }
-
-    /* Asigna memoria cada puntero dentro de data */
-    for(i = 0; i < INPUT_FILE_FIELDS; i++) {
-        if((data[i] = calloc(sizeof(char), BUFFER_INIT_SIZE)) == NULL) {
-            show_status(ERROR_MEMORY);
-            for(j = 0; j < i; j++)
-                free(data[j]);
-
-            free(b);
-            cla_destroy(&cla);
-            ADT_Vector_destroy(&v);
-            return ERROR_MEMORY;
-        }
-    }
-        
-    /* Abre el archivo de entrada */
-    if((fi = fopen(cla->fi, "rt")) == NULL) {
-        show_status(ERROR_OPENING_FILE);
-        for(j = 0; j < INPUT_FILE_FIELDS; j++)
-            free(data[j]);
-
-        free(b);
-        cla_destroy(&cla);
-        ADT_Vector_destroy(&v);
-        return ERROR_OPENING_FILE;
-    }
-
-    while(fgets(b, BUFFER_INIT_SIZE, fi)) {
-        string_split(b, data, INPUT_FILE_DELIM);
-
-        id = strtol(data[POS_USER_ID], &endptr, 10);
-        if(*endptr != '\0') return ERROR_CORRUPT_DATA;
-
-        amount = strtol(data[POS_AMOUNT], &endptr, 10);
-        if(*endptr != '\0') return ERROR_CORRUPT_DATA;
-
-        if((user = (user_t)ADT_Vector_get_elem(v, user)) != NULL) {
-            /* El usuario ya existe */
-            user_add_amount(&user, amount);
-            printf("el usuario ya existe: %ld\n", user->id);
-        }
-        else { 
-            /* El usuario no existe */
-            user_create(&user);
-            user_set_data(&user, data);
-            /* user->id = id; */
-            /* user_add_amount(&user, amount); */
-        }
-
-        up = user;
-
-        ADT_Vector_add(&v, up);
-        /* printf("%ld\n", user->id); */
-    }
-
-    /* ADT_Vector_print(v, stdout); */
-    /* cla_destroy(&cla); */
-    /* ADT_Vector_destroy(&v); */
-    return OK;
-}
-
-
-
-
-
-
-/*
-
-// "ca" - creditos ascendentes | "cd" - creditos descendentes
-// "da" - debitos ascendentes  | "dd" - debitos descendentes
-#define SORTING_ORDER    "cd"
-#define PRINT_EXIT_SUCCESS_MSG
-
-
-
-#ifdef PRINT_EXIT_SUCCESS_MSG
-
-    // Imprime un mensaje para darle a conocer al usuario
-    // que todo se ejecuto correctamente
-    printf("\n%s\n%s%ld\n%s%ld\n", EXIT_SUCCESS_MSG, USERS_REGISTERED_MSG,\
-            size, PROCESED_LINES_MSG, cla->parsed_lines);
-
-#endif
-*/
-
-
-    /* Carga en users los usuarios desde el archivo de entrada */
-    /* if((st = process_file(cla, &users, &size)) != OK) { */
-    /*     show_status(st); */
-    /*     cla_destroy(&cla); */
-    /*     destroy_users(users, size); */
-    /*     return st; */
-    /* } */
-
-    /* Ordena los usuarios con orden SORTING_ORDER */
-    /* if((st = sort_users(users, size, SORTING_ORDER)) != OK) { */
-    /*     show_status(st); */
-    /*     cla_destroy(&cla); */
-    /*     destroy_users(users, size); */
-    /*     return st; */
-    /* } */
-
-    /* Imprime los datos cargados en users a un archivo de salida */
-    /* if((st = export_data(cla, users, size)) != OK) { */
-    /*     show_status(st); */
-    /*     cla_destroy(&cla); */
-    /*     destroy_users(users, size); */
-    /*     return st; */
-    /* } */