Hola a todos soy nuevo en el foro. Les paso a contar este es un código que estaba practicando pero quede trabado en el camino, si me pudieran ayudar a solucionar mi problema se los agradeceré.
Lo que hace es abrir un archivo txt que tiene previamente cargado datos de nombre,profesión y edad para distinguir a cada uno uso un + para separarlas en el archivo.
La idea era llevarlo a esto para n personas cargadas. ya intente haciendo un for pero la verdad no lo he podido resolver. Saludos.
Este es el archivo txt
+Nuha Ali+C Programming+23+javier T+Electronic+45+
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
void lectura (char Archivo[]);
typedef struct{
char nombre[200],p_profesion[200],p_edad[200];
}sujeto;
main() {
sujeto lista;
int i=0, j=0,k=0,n=1,c=0;
char Archivo [200],*pArchivo;
int l, p[10], *pp;
pp = p;
pArchivo = Archivo;
lectura(Archivo);
for (i=0; i<300; i++) lista.nombre[i] = lista.p_profesion[i] = lista.p_edad[i] = 0;
printf ("Cadena provista por el Archivo:\n");
printf ("\n%s\n\n",pArchivo);
l = strlen(pArchivo);
for (i=0; i<l; i++){
if (*(pArchivo++) == '+' ){
pp [j]= i;
j++;
}
}
printf ("DATOS:\n\n");
strncpy(lista.nombre, Archivo+pp[0]+1,pp[1]-1);
strncpy (lista.p_profesion, Archivo+pp[1]+1,pp[2]-pp[1]-1);
strncpy (lista.p_edad, Archivo+pp[2]+1,pp[3]-pp[2]-1);
printf ("Nombre: %s\n",lista.nombre);
printf ("Profesion: %s\n",lista.p_profesion);
printf ("Edad: %s\n",lista.p_edad);
strncpy(lista.nombre, Archivo+pp[3]+1,pp[4]-pp[3]-1);
strncpy (lista.p_profesion, Archivo+pp[4]+1,pp[5]-pp[4]-1);
strncpy (lista.p_edad, Archivo+pp[5]+1,pp[6]-pp[5]-1);
printf ("Nombre: %s\n",lista.nombre);
printf ("Profesion: %s\n",lista.p_profesion);
printf ("Edad: %s\n",lista.p_edad);
getch();
}
void lectura (char Archivo[])
{
FILE *fichero;
fichero=fopen("3.txt","r");
if (fichero == NULL){
printf("\nError de apertura del archivo. \n");
}
else{
while (feof(fichero)==0)
{
fgets(Archivo,200,fichero);
}
fclose(fichero);
}
}
Esta es la parte del código que yo quiero implementar para n personas. O sea hacerlo mas generalizado
strncpy(lista.nombre, Archivo+pp[0]+1,pp[1]-1);
strncpy (lista.p_profesion, Archivo+pp[1]+1,pp[2]-pp[1]-1);
strncpy (lista.p_edad, Archivo+pp[2]+1,pp[3]-pp[2]-1);
printf ("Nombre: %s\n",lista.nombre);
printf ("Profesion: %s\n",lista.p_profesion);
printf ("Edad: %s\n",lista.p_edad);
strncpy(lista.nombre, Archivo+pp[3]+1,pp[4]-pp[3]-1);
strncpy (lista.p_profesion, Archivo+pp[4]+1,pp[5]-pp[4]-1);
strncpy (lista.p_edad, Archivo+pp[5]+1,pp[6]-pp[5]-1);
printf ("Nombre: %s\n",lista.nombre);
printf ("Profesion: %s\n",lista.p_profesion);
printf ("Edad: %s\n",lista.p_edad);
Muy fácil estás repetiendo código innecesariamente no se te ha ocurrido otro for?
Muy buenas.
Para resolver tu problema lo que podrías hacer es leer el archivo línea a línea con fgets y, sobre la cadena adquirida, usar la función strtok con el separador + para recoger cada subcadena.