Te incluyo también el código del programa de Filtrar por si te ayuda en algo:
Código C++:
Ver original#include <iostream>
#include <iomanip>
#include <fstream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <list>
#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;
//VARIABLES PER FILTRAR
int em,re,fl;
string ori,de;
ostringstream convert,convert2;
convert << em;
ori=convert.str();
ori = ori + ".0";
convert2 << re;
de=convert2.str();
de = de + ".0";
//FITXERS DE LECTURA I ESCRIPTURA
ifstream fitxer;
ofstream fitxerFiltrat;
fitxer.open("Proces/out.tr");
fitxerFiltrat.open("Proces/outFiltrat.tr");
if (!fitxer || !fitxerFiltrat) {
cerr << "Error al llegir o Escriure 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 E: {
}break;
case R: {
}break;
case FLU: {
}break;
case O: {
camps.O = pch;
}break;
case D: {
camps.D = pch;
}break;
}
camp++;
}
if(camp != I+1){ cout << "ERROR DE FITXER DE LECTURA"; return 1;}
if((camps.FLU==fl) && (ori.compare(camps.O)==0) && (de.compare(camps.D)==0) && (((camps.EV == '+') && (camps.E==em)) || ((camps.EV=='r')&&(camps.R==re)))){
fitxerFiltrat << linia << endl;
}
//BUIDAR STRUCT
memcpy(&camps
, &zero
, sizeof(DADES_ARXIU
)); //BUIDAR CHAR
delete[] copia;
}
fitxer.close();
fitxerFiltrat.close();
return 0;
}