commit 6b416dc25a00a138a8d458d092ec067917d62755
parent 3ae4b956f9251c372ff86f743afb905df7ef47ae
Author: klewer-martin <martin.cachari@gmail.com>
Date: Thu, 29 Jul 2021 12:59:57 -0300
Update:
Diffstat:
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; */
- /* } */