Hola de nuevo,
He decidido eliminar los paquetes tipo '-' y tipo 'd' por lo que me deja solo dos listas '+' y 'r'. Los tipo '-' no me aportan nada y los 'd' solo necesito la cantidad la cual puedo sacar restando-le a los generados los recibidos.
Con el tema de la listas voy un poco perdido. Como podría recorrer-la? He visto que hay iteradores pero me pierdo en mi caso al tener el struct dentro de la lista. Sigo teniendo los campos separados igual que el struct? y si es así como puedo acceder a ellos para obtener los datos que necesito? Tendría que encontrar la manera de mover-me por las listas y así ir obteniendo los datos que necesito comparando las dos listas.
Te pongo el código para que veas como lo tengo ahora:
Código C++:
Ver original#include <iostream>
#include <iomanip>
#include <fstream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sstream>
#include <list>
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() {
int Pgenerats=0,Prebuts=0,Peliminats=0;//DADES PER ANALITZAR
int camp;//INDEX
//ESTRUCTURES
list <DADES_ARXIU> generats;
list <DADES_ARXIU> rebuts;
DADES_ARXIU camps;
DADES_ARXIU zero = {0, 0, 0, 0, "", 0, "", 0, "", "", 0, 0};
char *pch, *copia;
string linia;
//FITXER DE LECTURA
ifstream fitxer;
fitxer.open("Proces/outFiltrat.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;}
if(camps.EV == '+'){Pgenerats++;generats.push_back (camps);}
if(camps.EV == 'r'){Prebuts++;rebuts.push_back (camps);}
//BUIDAR STRUCT
memcpy(&camps
, &zero
, sizeof(DADES_ARXIU
)); //BUIDAR CHAR
delete[] copia;
}
while (!generats.empty()){
//AQUI TENDRIA QUE COGER UNA LINEA Y BUSCAR LA RECIBIDA EN LA OTRA LISTA
generats.pop_front();
}
Peliminats=Pgenerats-Prebuts;
fitxer.close();
generats.clear();
rebuts.clear();
return 0;
}
Fran