Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include "list.h"
- typedef struct mundo mundo;
- struct mundo {
- char *nombre;
- char *ubicacion;
- int fecha_creacion;
- };
- // Funcion que duplica la cadena que es pasada por parametro
- char * _strdup (const char *s);
- // Funcion de lectura de archivo csv
- const char *get_csv_field (char * tmp, int i);
- // Funcion para crear un nuevo mundo
- mundo *crear_mundo (char *nombre, char *ubicacion, int fecha_creacion);
- int main() {
- // Lista que va a guardar los mundos
- list *mundos = list_create_empty ();
- // Se abre el archivo de mundos csv en modo lectura "r"
- FILE *fp = fopen ("mundos.csv", "r");
- // Cadena para guardar la linea completa del archivo csv
- char linea[1024];
- while (fgets (linea, 1023, fp) != NULL) { // Se lee la linea
- char *nombre = get_csv_field(linea, 1); // Se obtiene el nombre
- char *ubicacion = get_csv_field(linea, 2); // Ubicacion
- int fecha_creacion = atoi(get_csv_field(linea, 3)); // fecha de creacion
- mundo *m = crear_mundo (nombre, ubicacion, fecha_creacion); // Se crea un nuevo mundo
- list_push_back (mundos, m); // Se inserta en la lista mundos
- }
- mundo *data = list_first (mundos); // Pongo el current al principio
- while (data != NULL) { // Recorro hasta que sea distinto de null
- printf ("%s %s %d\n", data->nombre, data->ubicacion, data->fecha_creacion); // Muestro el mundo
- // NO OLVIDAR ACTUALIZAR EL DATA CON EL NEXT O PREV !!!
- data = list_next (mundos);
- }
- return 0;
- }
- mundo *crear_mundo (char *nombre, char *ubicacion, int fecha_creacion) {
- mundo *m = malloc(sizeof(mundo));
- m->nombre = nombre;
- m->ubicacion = ubicacion;
- m->fecha_creacion = fecha_creacion;
- return m;
- }
- char * _strdup (const char *s) {
- size_t len = strlen (s) + 1;
- void *new = malloc (len);
- if (new == NULL)
- return NULL;
- return (char *) memcpy (new, s, len);
- }
- const char *get_csv_field (char * tmp, int i) {
- //se crea una copia del string tmp
- char * line = _strdup (tmp);
- const char * tok;
- for (tok = strtok (line, ","); tok && *tok; tok = strtok (NULL, ",\n")) {
- if (!--i) {
- return tok;
- }
- }
- return NULL;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement