Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema con bucle para recoger datos de archivo separados por coma (C)

Estas en el tema de Problema con bucle para recoger datos de archivo separados por coma (C) en el foro de C/C++ en Foros del Web. Tengo un problema con este fragmento de código, ya que los datos del archivo no se guardan bien en las estructuras. El archivo tiene datos ...
  #1 (permalink)  
Antiguo 15/11/2012, 18:29
Avatar de rodrigoemece  
Fecha de Ingreso: septiembre-2011
Mensajes: 68
Antigüedad: 12 años, 7 meses
Puntos: 1
Pregunta Problema con bucle para recoger datos de archivo separados por coma (C)

Tengo un problema con este fragmento de código, ya que los datos del archivo no se guardan bien en las estructuras.
El archivo tiene datos con el siguiente formato: en cada línea (nif,nomes,salario).
Gracias y un saludo! :)

Código C:
Ver original
  1. struct traballador{
  2.   char nif[LNX];
  3.   char nome[LNX];
  4.   float salario;
  5.   };
  6.  
  7. main()
  8. {
  9.   int n=0, s, z, m=0, r=0, sin=0, rep=0, i;
  10.   char nif[LNX];
  11.   struct traballador tb[30];  
  12.              FILE *fp;
  13.               fp = fopen("trab.db","r+t");
  14.  
  15.               if(fp==NULL)
  16.                 {
  17.                 printf("Erro na apertura do arquivo.\n");
  18.                 exit(1);
  19.                 }
  20.                 n=0;                
  21.                 while(feof(fp)==0 && n<LNX)
  22.                 {                    
  23.                     z=getc(fp);
  24.                     if(z!=',')
  25.                     {
  26.                        if(m==0)
  27.                         {
  28.                           tb[n].nif[r]=z;
  29.                           r++;
  30.                         }
  31.                         else if(m==1)
  32.                         {
  33.                            tb[n].nome[r]=z;
  34.                            r++;                  
  35.                         }
  36.                         else if(m==2)
  37.                         {
  38.                            fscanf(fp,"%d",&tb[n].salario);
  39.                            z=',';
  40.                         }
  41.                      }
  42.                     if(z==',')
  43.                     {
  44.                         if(m==0) tb[n].nif[r]='\0';
  45.                         else if(m==1) tb[n].nome[r]='\0';
  46.                         else if(m==2) {n++; m=-1;}
  47.                         m++;
  48.                         r=0;
  49.                     }
  50.                   }
  51.                 }
  #2 (permalink)  
Antiguo 16/11/2012, 02:14
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 2 meses
Puntos: 89
Respuesta: Problema con bucle para recoger datos de archivo separados por coma (C)

¿Qué problema tienes?
¿Error de compilación?
¿Has depurado a ver si es de ejecución?
  #3 (permalink)  
Antiguo 16/11/2012, 04:46
Avatar de rodrigoemece  
Fecha de Ingreso: septiembre-2011
Mensajes: 68
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Problema con bucle para recoger datos de archivo separados por coma (C)

Lo he cambiado. El programa funciona correctamente pero en este tramo, al capturar el salario, la primera cifra del mismo desaparece. Supongo que se debe al z=getc(fp) del principio, al no ser el salario un vector pero no sé cómo arreglarlo. Gracias por contestar!

Código C:
Ver original
  1. FILE *fp;
  2.               fp = fopen("trab.db","r+t");
  3.  
  4.               if(fp==NULL)
  5.                 {
  6.                 printf("Erro na apertura do arquivo.\n");
  7.                 exit(1);
  8.                 }
  9.                 n=0;                
  10.                 while(feof(fp)==0 && n<LNX)
  11.                 {                    
  12.                     z=getc(fp);
  13.                     if(z!=',')
  14.                     {
  15.                        if(m==0)
  16.                         {
  17.                           tb[n].nif[r]=z;
  18.                           r++;
  19.                         }
  20.                         else if(m==1)
  21.                         {
  22.                            tb[n].nome[r]=z;
  23.                            r++;                  
  24.                         }
  25.                         else if(m==2)
  26.                         {
  27.                            fscanf(fp,"%f",&tb[n].salario);
  28.                            fgetc(fp);
  29.                            z=',';
  30.                         }
  31.                      }
  32.                     if(z==',')
  33.                     {
  34.                         if(m==0) tb[n].nif[r]='\0';
  35.                         else if(m==1) tb[n].nome[r]='\0';
  36.                         else if(m==2) {n++; m=-1;}
  37.                         m++;
  38.                         r=0;
  39.  
  40.                     }
  41.                    
  42.  
  43.                 }

Etiquetas: bucle, coma, recoger
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:19.