Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2019
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.21 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "list.h"
  4.  
  5. typedef struct mundo mundo;
  6.  
  7. struct mundo {
  8. char *nombre;
  9. char *ubicacion;
  10. int fecha_creacion;
  11. };
  12.  
  13. // Funcion que duplica la cadena que es pasada por parametro
  14. char * _strdup (const char *s);
  15.  
  16. // Funcion de lectura de archivo csv
  17. const char *get_csv_field (char * tmp, int i);
  18.  
  19. // Funcion para crear un nuevo mundo
  20. mundo *crear_mundo (char *nombre, char *ubicacion, int fecha_creacion);
  21.  
  22.  
  23. int main() {
  24.  
  25. // Lista que va a guardar los mundos
  26. list *mundos = list_create_empty ();
  27.  
  28. // Se abre el archivo de mundos csv en modo lectura "r"
  29. FILE *fp = fopen ("mundos.csv", "r");
  30.  
  31. // Cadena para guardar la linea completa del archivo csv
  32. char linea[1024];
  33.  
  34. while (fgets (linea, 1023, fp) != NULL) { // Se lee la linea
  35. char *nombre = get_csv_field(linea, 1); // Se obtiene el nombre
  36. char *ubicacion = get_csv_field(linea, 2); // Ubicacion
  37. int fecha_creacion = atoi(get_csv_field(linea, 3)); // fecha de creacion
  38. mundo *m = crear_mundo (nombre, ubicacion, fecha_creacion); // Se crea un nuevo mundo
  39. list_push_back (mundos, m); // Se inserta en la lista mundos
  40. }
  41.  
  42. mundo *data = list_first (mundos); // Pongo el current al principio
  43.  
  44. while (data != NULL) { // Recorro hasta que sea distinto de null
  45. printf ("%s %s %d\n", data->nombre, data->ubicacion, data->fecha_creacion); // Muestro el mundo
  46.  
  47. // NO OLVIDAR ACTUALIZAR EL DATA CON EL NEXT O PREV !!!
  48. data = list_next (mundos);
  49. }
  50.  
  51. return 0;
  52. }
  53.  
  54. mundo *crear_mundo (char *nombre, char *ubicacion, int fecha_creacion) {
  55. mundo *m = malloc(sizeof(mundo));
  56. m->nombre = nombre;
  57. m->ubicacion = ubicacion;
  58. m->fecha_creacion = fecha_creacion;
  59. return m;
  60. }
  61.  
  62. char * _strdup (const char *s) {
  63. size_t len = strlen (s) + 1;
  64. void *new = malloc (len);
  65.  
  66. if (new == NULL)
  67. return NULL;
  68.  
  69. return (char *) memcpy (new, s, len);
  70. }
  71.  
  72. const char *get_csv_field (char * tmp, int i) {
  73. //se crea una copia del string tmp
  74. char * line = _strdup (tmp);
  75. const char * tok;
  76. for (tok = strtok (line, ","); tok && *tok; tok = strtok (NULL, ",\n")) {
  77. if (!--i) {
  78. return tok;
  79. }
  80. }
  81. return NULL;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement