| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
nabopene
Registrado: 23 Feb 2013 Mensajes: 2
| Publicado: 13/05/2014 2:44 am | | | Título: Guardar datos fichero o archivo en structs |
| Hola, en un ejercicio tengo una serie de ficheros, que contienen una serie de datos organizados que tendria que guardar en forma de structs. Por ejemplo; un fichero profesores.txt que contiene: Pablo, 34, Matemáticas Pepe, 23, Geografia
Mi duda es como abrir fichero, y guardar estos datos en un struct. Muchas gracias |
| | Volver arriba | |  | rir3760

Registrado: 01 Oct 2004 Mensajes: 7517 Ubicación: Mexico
| Publicado: 13/05/2014 6:14 am | | | Título: |
| Hola
Bienvenido a los foros. Por favor lee sus reglas.
Formas hay varias.
Una es leer linea por linea almacenando esta en un array y de ella se extraen cada uno de los campos con sscanf.
Si el contenido del archivo "Entrada.txt" es:
| Código: | Pablo, 34, Matematicas Pepe, 23, Geografia |
Este programa:
| Código: | #include <stdio.h> #include <stdlib.h>
#define NOM_ARCHIVO "Entrada.txt"
#define MAX_CHARS 32 #define MAX_LINEA 1024
struct alumno { char nombre[MAX_CHARS]; int edad; char materia[MAX_CHARS]; };
int main(void) { FILE *in; char linea[MAX_LINEA]; struct alumno alum; /* Abrimos el archivo (terminamos si ocurre un error) */ if ((in = fopen(NOM_ARCHIVO, "rt")) == NULL){ perror(NOM_ARCHIVO); return EXIT_FAILURE; } /* Leemos y procesamos cada linea del archivo */ while (fgets(linea, MAX_LINEA, in) != NULL){ /* Verificamos si existen los tres campos separados por comas */ if (sscanf(linea, " %[^,], %d, %[^\n]", alum.nombre, &alum.edad, alum.materia) == 3){ /* Datos leidos y almacenados en la estructura auxiliar */ /* Se procesa, en este ejemplo simplemente se imprime */ printf(" Nombre: \"%s\"\n", alum.nombre); printf(" Edad: %d\n", alum.edad); printf("Materia: \"%s\"\n\n", alum.materia); }else puts("Linea no valida"); } fclose(in); return EXIT_SUCCESS; } |
Genera la salida:
| Código: | Nombre: "Pablo" Edad: 34 Materia: "Matematicas"
Nombre: "Pepe" Edad: 23 Materia: "Geografia" |
Dependiendo de la estructura del archivo de entrada (que tan compleja sea) y las validaciones que deban realizarse se pueden/deben utilizar otras funciones como strtok, strspn/strcspn, etc.
Un saludo _________________ C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |