Ver Mensaje Individual
  #15 (permalink)  
Antiguo 27/12/2012, 05:14
kelvi
 
Fecha de Ingreso: diciembre-2012
Mensajes: 13
Antigüedad: 12 años
Puntos: 0
Respuesta: Lectura de archivo en C++

Hola de nuevo,

Primero de todo espero que hayan pasado unas buenas fiestas!

Al final decidí anular el tema de la lista porqué no lo acababa usando.

Creo que no terminé de explicar-me en mi último post.

Lo que yo quiero es:

Una vez obtenida la primera linea del fichero necesito volver a leer todo el fichero para encontrar otra linea de unas características. Y así para cada una de las lineas.

A ver si me explico... yo leo la primera linea por ejemplo:

Código Texto:
Ver original
  1. + 0.1 0 3 tcp 40 ------- 1 0.0 5.2 0 0

La cual ya tendré separada por los campos. Esta linea significa que se a generado un paquete.

Pues ahora necesito comparar esta linea con todas las del fichero para encontrar la siguiente:

Código Texto:
Ver original
  1. r 0.130067 4 5 tcp 40 ------- 1 0.0 5.2 0 0

Que significa que el nodo de destino a recibido ese paquete.

Por eso mismo necesito hacer una re lectura del fichero por cada linea obtenida o al menos hasta encontrar su linea pertinente. (Que eso ya sería un if que rompa el bucle)

Este es mi código por ahora:
Código C++:
Ver original
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <fstream>
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include <stdlib.h>
  7. #include <sstream>
  8.  
  9. using namespace std;
  10.  
  11. typedef struct {
  12.     char EV;
  13.     float T;
  14.     int E,R;
  15.     string P;
  16.     float G;
  17.     string FLA;
  18.     int FLU;
  19.     string O,D;
  20.     float S,I;
  21. } DADES_ARXIU;
  22.  
  23. enum ID_CAMPS{EV,T,E,R,P,G,FLA,FLU,O,D,S,I};
  24.  
  25. int main() {
  26.     DADES_ARXIU camps;
  27.     DADES_ARXIU zero = {0, 0, 0, 0, "", 0, "", 0, "", "", 0, 0};
  28.     int camp;//incremental
  29.     char *pch, *copia;
  30.     string linia;
  31.     //FITXER DE LECTURA
  32.     ifstream fitxer;
  33.     fitxer.open("Proces/out.tr");
  34.     if (!fitxer) {
  35.         cerr << "Error al llegir fitxer";
  36.         return 1;
  37.     }
  38.  
  39.     while(getline(fitxer,linia)){  
  40.         copia = new char [linia.size()+1];
  41.         strcpy (copia,linia.c_str());
  42.         camp = EV;
  43.         pch = strtok(copia, " ");
  44.         while(pch != NULL){
  45.             switch(camp) {
  46.                 case EV: {                 
  47.                                 camps.EV = pch[0];
  48.                         }break;
  49.                 case T: {
  50.                     camps.T = atof(pch);                    
  51.                 }break;
  52.                 case E: {
  53.                     camps.E = atoi(pch);                    
  54.                         }break;
  55.                 case R: {
  56.                     camps.R = atoi(pch);                    
  57.                 }break;
  58.                 case P: {
  59.                     camps.P = pch;                    
  60.                         }break;
  61.                 case G: {
  62.                     camps.G = atof(pch);                  
  63.                 }break;
  64.                 case FLA: {
  65.                     camps.FLA = pch;               
  66.                         }break;
  67.                 case FLU: {
  68.                     camps.FLU = atoi(pch);      
  69.                 }break;
  70.                 case O: {
  71.                     camps.O = pch;              
  72.                         }break;
  73.                 case D: {
  74.                     camps.D = pch;                  
  75.                 }break;
  76.                 case S: {
  77.                     camps.S = atoi(pch);                    
  78.                         }break;
  79.                 case I: {
  80.                     camps.I = atoi(pch);                    
  81.                 }break;
  82.             }
  83.             pch = strtok (NULL, " ");
  84.             camp++;
  85.         }
  86.     if(camp != I+1){ cout << "ERROR DE FITXER"; return 1;}
  87.     //BUIDAR STRUCT
  88.     memcpy(&camps, &zero, sizeof(DADES_ARXIU));
  89.     //BUIDAR CHAR
  90.     delete[] copia;
  91.     }
  92.     fitxer.close();
  93.     return 0;
  94. }

Saludos,
Fran