Muchas Gracias por la rapidez. Ahora miro a ver si puedo hacerlo!!
Ahora tengo esto
Código C++:
Ver original#include <iostream>
#include <iomanip>
#include <fstream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <list>
using namespace std;
typedef struct {
char EV;
float T;
int E,R;
string P;
float G;
string FLA;
int FLU;
float O,D,S,I;
} DADES_ARXIU;
enum ID_CAMPS{EV,T,E,R,P,G,FLA,FLU,O,D,S,I};
int main() {
list <DADES_ARXIU> llista;
DADES_ARXIU camps;
int camp;//incremental
char * pch;
string linia;
//FITXER DE LECTURA
ifstream fitxer;
fitxer.open("TCL/out.tr");
if (!fitxer) {
cerr << "Error al llegir fitxer";
return 1;
}
while(getline(fitxer,linia)){
camp = EV;
pch
= strtok((char*)linia.
c_str(), " "); while(pch != NULL){
switch(camp) {
case EV: {
//camps.EV = pch.c_srt();
}break;
case T: {
//camps.T = atof(linia[pch]);
}break;
case E: {
//camps.E = atoi(pch);
}break;
case R: {
//camps.R = atoi(pch);
}break;
case P: {
camps.P = pch;
}break;
case G: {
//camps.G = atof(pch);
}break;
case FLA: {
camps.FLA = pch;
}break;
case FLU: {
//camps.FLU = atoi(pch);
}break;
case O: {
//camps.O = atof(pch);
}break;
case D: {
//camps.D = atof(pch);
}break;
case S: {
//camps.S = atoi(pch);
}break;
case I: {
//camps.I = atoi(pch);
}break;
}
llista.push_back (camps);
camp++;
}
if(camp>12){ cout << "ERROR DE FITXER"; return 1;}
}
fitxer.close();
return 0;
}
Aunque parezca un separador, el campo SEP, en mi código FLA, realmente no es un separador son banderas, cada uno de los guiones puede tomar un valor char.
R2 y R3, en mi código O y D, también me interesaría verlos como char. Ya que por ejemplo si es 1.0 cada una de las dos cifras me indica una cosa distinta.
Cuando lanzo el programa me da errores dentro del switch por eso tengo las asignaciones puestas en comentarios.
Si quito este comentario:
Me da el siguiente error:
lectura.cpp: En la función ‘int main()’:
lectura.cpp:45:35: error: conversión inválida de ‘char*’ a ‘char’ [-fpermissive]
Y si quito este:
Me da este otro error:
lectura.cpp: En la función ‘int main()’:
lectura.cpp:48:30: error: conversión inválida de ‘char*’ a ‘unsigned int’ [-fpermissive]
/usr/include/c++/4.6/bits/basic_string.h:835:7: error: argumento de inicialización 1 de ‘std::basic_string<_CharT, _Traits, _Alloc>::reference std::basic_string<_CharT, _Traits, _Alloc>::operator[](std::basic_string<_CharT, _Traits, _Alloc>::size_type) [con _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>, std::basic_string<_CharT, _Traits, _Alloc>::reference = char&, std::basic_string<_CharT, _Traits, _Alloc>::size_type = unsigned int]’ [-fpermissive]
lectura.cpp:48:31: error: conversión inválida de ‘char’ a ‘const char*’ [-fpermissive]
/usr/include/stdlib.h:145:15: error: argumento de inicialización 1 de ‘double atof(const char*)’ [-fpermissive]
Como podría solucionarlo??
Perdón si pregunto demasiado pero es que estoy hecho un lio.
Gracias otra vez!