Leer datos de un archivo.txt y almacenarlos en una estructura
Publicado por Jefferson (1 intervención) el 21/01/2020 03:50:15
Buenos Días con todos,
Necesito ayuda con un programa que sea capaz de leer los datos de un fichero y almacenarlos en una estructura:
El fichero esta ordenado de la siguiente manera: la primera linea contiene el número de empleados que tiene la empresa y de la segunda en adelante los datos de cada empleado (Nombre1_nombre2_apellido1_apellido2 direccion telefono correo) por ejemplo:
//
5
Mary_Estefa_Gonzales_Carrion Av.Naciones_Unidas_310_Mañosca 067495859 [email protected]
Marco_Javier_Altamirano_Herrera Av.Los_Shyrirs 097676347 [email protected]
Eva_Maria_Garces_Casas Ambato 096746356 [email protected]
Juan_Jose_Flores_Alvarez España 097637645 [email protected]
Estela_Marta_Puerta_Velazco Av.Salle_Turubamba 097645637 [email protected]
//
Notese que los guiones bajos separan cadenas correspondientes al mismo apartado y el " " espacio es el que separa los campos de información,
Lo que tengo del programa es lo siguiente:
---------------------------------------------------------------------------------------
Hace lo solicitado pero siento que esta demasiado largo y necesito una manera de hacerlo más eficiente, además de tomar el dato de la primera linea como numero de trabajadores sin tener que realizar el contador de lineas que tiene el archivo.
De antemano muchas gracias, espero su pronta respuesta
Necesito ayuda con un programa que sea capaz de leer los datos de un fichero y almacenarlos en una estructura:
El fichero esta ordenado de la siguiente manera: la primera linea contiene el número de empleados que tiene la empresa y de la segunda en adelante los datos de cada empleado (Nombre1_nombre2_apellido1_apellido2 direccion telefono correo) por ejemplo:
//
5
Mary_Estefa_Gonzales_Carrion Av.Naciones_Unidas_310_Mañosca 067495859 [email protected]
Marco_Javier_Altamirano_Herrera Av.Los_Shyrirs 097676347 [email protected]
Eva_Maria_Garces_Casas Ambato 096746356 [email protected]
Juan_Jose_Flores_Alvarez España 097637645 [email protected]
Estela_Marta_Puerta_Velazco Av.Salle_Turubamba 097645637 [email protected]
//
Notese que los guiones bajos separan cadenas correspondientes al mismo apartado y el " " espacio es el que separa los campos de información,
Lo que tengo del programa es lo siguiente:
---------------------------------------------------------------------------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct{
char Nombre[60];
char Direccion[100];
int Telefono[9];
char Email[30];
int Faltas;
int HorasTrabajadas;
}EMPLEADO;
void registrar_datos_personales();
void vaciar(char temp[]);
EMPLEADO *empleados;
int cont;
int main(){
registrar_datos_personales();
printf("Hay %d empleados en total\n",cont);
for(int i=0;i<cont;i++){
printf("nombre: %s\n",empleados[i].Nombre);
printf("direccion: %s\n",empleados[i].Direccion);
printf("numero: %s\n",empleados[i].Telefono);
printf("email: %s\n",empleados[i].Email);
printf("Atrasos: %d\n",empleados[i].Faltas);
printf("Horas Trabajadas: %d\n\n",empleados[i].HorasTrabajadas);
}
}
void registrar_datos_personales(){
FILE *f;
char linea[300], aux;
int i,j;
cont=0;
f=fopen("empleados.txt","r");
if(f==NULL){
printf("No se puede abrir el archivo\n");
return;
}
fgets(linea,300,f);
while(!feof(f)){
fgets(linea,300,f);
cont++;
}
rewind(f);
fgets(linea,300,f);
empleados=(EMPLEADO*)malloc(cont*sizeof(EMPLEADO));
for(i=0;!feof(f);i++){
vaciar(linea);
aux='\0';
for(j=0;aux!=' ';j++){
aux=fgetc(f);
linea[j]=aux;
if(aux=='_')
linea[j]=' ';
}
strcpy(empleados[i].Nombre,linea);
vaciar(linea);
aux='\0';
for(j=0;aux!=' ';j++){
aux=fgetc(f);
linea[j]=aux;
if(aux=='_')
linea[j]=' ';
}
strcpy(empleados[i].Direccion,linea);
vaciar(linea);
fgets(linea,10,f);
for(j=0;aux!=' ';j++){
aux=fgetc(f);
linea[j]=aux;
}
strcpy(empleados[i].Telefono,linea);
fgets(linea,30,f);
for(j=0;aux=='\n';j++){
aux=fgetc(f);
linea[j]=aux;
}
strcpy(empleados[i].Email,linea);
vaciar(linea);
empleados[i].Faltas=0;
empleados[i].HorasTrabajadas=0;
}
fclose(f);
}
void vaciar(char temp[]){
for(int i=0;i<300;i++)
temp[i]=NULL;
}
Hace lo solicitado pero siento que esta demasiado largo y necesito una manera de hacerlo más eficiente, además de tomar el dato de la primera linea como numero de trabajadores sin tener que realizar el contador de lineas que tiene el archivo.
De antemano muchas gracias, espero su pronta respuesta
Valora esta pregunta


0