ayuda con strncpy y archivo.

Iniciado por montenegrooo, 4 Diciembre 2015, 14:39 PM

0 Miembros y 1 Visitante están viendo este tema.

montenegrooo

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+


Código (cpp) [Seleccionar]
#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

Código (cpp) [Seleccionar]

           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);

furciorifa

Muy fácil estás repetiendo código innecesariamente no se te ha ocurrido otro for?

MAFUS

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.