Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Pasar datos de txt a un struct

Estas en el tema de Pasar datos de txt a un struct en el foro de C/C++ en Foros del Web. Buenas, Necesito ayuda, tengo un fichero de texto en el que cada línea representa a una persona y necesito realizar una funcion que lea el ...
  #1 (permalink)  
Antiguo 13/12/2014, 13:30
Banshi
Invitado
 
Mensajes: n/a
Puntos:
Pasar datos de txt a un struct

Buenas,
Necesito ayuda, tengo un fichero de texto en el que cada línea representa a una persona y necesito realizar una funcion que lea el fichero de texto y vaya introduciendo cada persona en un array de estructuras. El formato del txt es el siguiente:
nombre apellido dni sexo edad(estan separados los campos por tabulación).

He empezado y no sé como seguir, primeramente porque solo me lee la primera línea y se queda pillado el programa y segundo, no se como separar esa linea para ir almacenando el campo que necesito en el atributo correspondiente de la estructura. Esto es lo que llevo hecho, por favor, echadme un cable. Gracias.

Código:
#include <stdio.h>
#include <stdlib.h>
#define TAM 50

typedef struct
{
    char nombre[30];
    char apellido1[30];
    int dni;
    char sexo;
    int edad;
} Tpersona;

void cargar_txt(Tpersona []);

int main()
{
    Tpersona personas[TAM];
    cargar_txt(personas);
    return 0;

}
void cargar_txt(Tpersona personas[TAM])
{
    FILE *f;
    f=fopen("PERSONAS.txt","r");


    if(f==NULL)
    {
        printf("Error de apertura\n");
    }
    else
    {
        char cad[30];
        printf("%s\n",fgets(cad,255,f));
        while(!feof(f))
        {
            printf("%s\n",fgets(cad,255,f));

        }
        fclose(f);
}
}
  #2 (permalink)  
Antiguo 13/12/2014, 14:17
lareto
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pasar datos de txt a un struct

Creo que deberías volver a leer cómo funciona fgets()

Revisa esto:
Cita:
char cad[30];
printf("%s\n",fgets(cad,255,f));
que es probable que cada línea en el archivo mida más de 30 caracteres.
  #3 (permalink)  
Antiguo 13/12/2014, 14:20
Banshi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pasar datos de txt a un struct

Cita:
Iniciado por lareto Ver Mensaje
Creo que deberías volver a leer cómo funciona fgets()

Revisa esto:
que es probable que cada línea en el archivo mida más de 30 caracteres.
Si ya me he dado cuenta y lo he corregido, ahora mismo estoy asi:
Código:
#include <stdio.h>
#include <stdlib.h>
#define TAM 50

typedef struct
{
    char nombre[30];
    char apellido1[30];
    int dni;
    char sexo;
    int edad;
} Tpersona;

void cargar_txt(Tpersona []);

int main()
{
    Tpersona personas[TAM];
    cargar_txt(personas);
    printf("Nombre %s\n",personas[0].nombre);
    printf("Apellido %s\n",personas[0].apellido1);
    printf("DNI %d\n",personas[0].dni);
    printf("Sexo %c\n",personas[0].sexo);
    printf("Edad %d\n",personas[0].edad);
    printf("Nombre %s\n",personas[1].nombre);
    printf("Apellido %s\n",personas[1].apellido1);
    printf("DNI %d\n",personas[1].dni);
    printf("Sexo %c\n",personas[1].sexo);
    printf("Edad %d\n",personas[1].edad);
    return 0;

}
void cargar_txt(Tpersona personas[TAM])
{
    FILE *f;
    Tpersona p;
    char *token;
    f=fopen("PERSONAS.txt","r");


    if(f==NULL)
    {
        printf("Error de apertura\n");
    }
    else
    {
        char cad[250];
        int cont=0,per=0;
        fgets(cad,255,f);
        while(!feof(f))
        {
            token = strtok(cad, ","); /*Separamos por espacios*/
            while (token != NULL)
            {
                switch(cont)
                {
                    case 0:
                        strcpy(p.nombre,token);
                        break;
                    case 1:
                        strcpy(p.apellido1,token);
                        break;
                    case 2:
                        p.dni=atoi(token);
                        break;
                    case 3:
                        p.sexo=token[0];
                        break;
                    case 4:
                        p.edad=atoi(token);
                        break;
                }
                cont++;
                token = strtok(NULL,",");
            }
            personas[per]=p;
            cont=0;
            per++;
            fgets(cad,255,f);

        }
        fclose(f);
    }
}
Ya me funciona, el nombre y el apellido me funcionaban bien, pero el resto no. A la hora de crear el txt, no se el por qué al dar a tabulación entre campos, algunas veces deja espacios amplios y en otras ocasiones parecen espaicios normales. He optado por separar los campos por comas y ya se ha solucionado. Gracias.

Última edición por Banshi; 13/12/2014 a las 14:30

Etiquetas: char, fichero, funcion, int, programa, struct, txt
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:30.