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+ 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 originalr 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#include <iostream>
#include <iomanip>
#include <fstream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sstream>
using namespace std;
typedef struct {
char EV;
float T;
int E,R;
string P;
float G;
string FLA;
int FLU;
string O,D;
float S,I;
} DADES_ARXIU;
enum ID_CAMPS{EV,T,E,R,P,G,FLA,FLU,O,D,S,I};
int main() {
DADES_ARXIU camps;
DADES_ARXIU zero = {0, 0, 0, 0, "", 0, "", 0, "", "", 0, 0};
int camp;//incremental
char *pch, *copia;
string linia;
//FITXER DE LECTURA
ifstream fitxer;
fitxer.open("Proces/out.tr");
if (!fitxer) {
cerr << "Error al llegir fitxer";
return 1;
}
while(getline(fitxer,linia)){
copia = new char [linia.size()+1];
camp = EV;
while(pch != NULL){
switch(camp) {
case EV: {
camps.EV = pch[0];
}break;
case T: {
}break;
case E: {
}break;
case R: {
}break;
case P: {
camps.P = pch;
}break;
case G: {
}break;
case FLA: {
camps.FLA = pch;
}break;
case FLU: {
}break;
case O: {
camps.O = pch;
}break;
case D: {
camps.D = pch;
}break;
case S: {
}break;
case I: {
}break;
}
camp++;
}
if(camp != I+1){ cout << "ERROR DE FITXER"; return 1;}
//BUIDAR STRUCT
memcpy(&camps
, &zero
, sizeof(DADES_ARXIU
)); //BUIDAR CHAR
delete[] copia;
}
fitxer.close();
return 0;
}
Saludos,
Fran