/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Guardar datos fichero o archivo en structs

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
nabopene



Registrado: 23 Feb 2013
Mensajes: 2

MensajePublicado: 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

MensajePublicado: 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
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com