Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/04/2011, 11:04
Hetzfield
 
Fecha de Ingreso: abril-2011
Mensajes: 1
Antigüedad: 13 años
Puntos: 1
Error al leer el fichero txt

Hola a todos:

Estoy realizando un proyecto y tengo que leer de cada línea de un fichero "txt" dos bloques distintos.

La estructura de la línea es la siguiente, los bloques están separados por un espacio en blanco:
FECHA " " HORA " " PRODUCCIÓN " " MÓDULO
Ejemplo:
2008-01-02 12:00 273 82.04

Tengo que leer la producción y el módulo, con lo que la fecha y la hora al ser constantes, empiezo a leer a partir de la posición 17. El problema me da al leer caracter a caracter, si muestro la línea entera, la enseña sin problemas, en cambio, sin voy carácter a carácter, me muestra muchísima basura. Por más vueltas que le he dado no hay forma de encontrar el fallo, espero que me podáis echar una mano.

Os adjunto el código a continuación:

Código C++:
Ver original
  1. #include<iostream.h>
  2. #include<fstream.h>
  3. #include<stdio.h>
  4. #include<string.h>
  5. #include<conio.h>
  6. #include<stdio.h>
  7. #include<stdlib.h>
  8.  
  9.  
  10. void main()
  11. {
  12.   int i,p,m;
  13.   float modulo;
  14.   bool espacio,finlinea=false;
  15.   char c,linea[30],prod[5],mod[5];
  16.   ifstream MiArchivo;
  17.  
  18.   //ABRIMOS EL FICHERO
  19.   MiArchivo.open("c:\\datos.txt");
  20.  
  21.   if (!MiArchivo.fail())
  22.   {
  23.     while (!MiArchivo.eof() )
  24.     {
  25.       strcpy(linea,"");
  26.       strcpy(prod,"");
  27.       strcpy(mod,"");
  28.  
  29.       //LEEMOS LA LINEA
  30.       MiArchivo.getline(linea,sizeof(linea));
  31.  
  32.       i=17;
  33.       p=0;
  34.       m=0;
  35.       finlinea=false;
  36.  
  37.       //ESTE IF ESTÁ PARA SALTAR LINEAS QUE NO QUEREMOS PARA NADA
  38.       if(strlen(linea)>17)
  39.       {
  40.        while(i<30 && !finlinea)
  41.        {
  42.             c=linea[i];
  43.                 if(c==' ')
  44.                          espacio=true;
  45.             if(c=='/n')
  46.                 finlinea=true;
  47.              else
  48.                 {
  49.                          //SI TODAVIA NO HEMOS ENCONTRADO EL ESPACIO,ES LA PRODUCCION
  50.                          if(!espacio)
  51.                          {
  52.                                 prod[p]=linea[i];
  53.                                 p++;
  54.                           }
  55.  
  56.                           else
  57.                           {
  58.                                 mod[m]=linea[i];
  59.                                 m++;
  60.                           }
  61.                  }
  62.          i++;
  63.          }
  64.          cout<<"Produccion: "<<prod<<endl;
  65.          cout<<"Módulo: "<<mod<<endl;
  66.       }
  67.       else
  68.         cout<<linea<<endl;
  69.     }
  70.     MiArchivo.close();
  71.   }
  72.   else
  73.    printf ("No se pudo abrir el archivo.");
  74.   getch();
  75. }



Muchas Gracias

Un saludo

Última edición por Hetzfield; 09/04/2011 a las 12:59