Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: JuszR en 23 Noviembre 2010, 19:01 pm



Título: Obtener primer integer de cada linea
Publicado por: JuszR en 23 Noviembre 2010, 19:01 pm
Tengo un archivo de texto (creado con el programa) así:
Citar
HORAS TIEMPO
----------------------------------------------------
2 3.00-5.00
10 6.30-16.30

Necesito obtener solo el primer integer de cada línea y hacer une operación (2
10...).

Este es el código que tengo hasta ahora:
Código
  1. fstream haceCuenta(nombArchivo, ios::in | ios::app);
  2.  
  3. while(haceCuenta)
  4. {
  5. std::string lineas;
  6. getline(haceCuenta, lineas);
  7. }
  8.  


Título: Re: Obtener primer integer de cada linea
Publicado por: Beakman en 23 Noviembre 2010, 22:09 pm
esta bien.
Ahora para obtener el numero entero tenes que dividir la cadena cada vez que se encuentre un espacio.
Creo que se separa por tabs, como te vi en el post anterior.

Entonces cada parte la guardas en una cadena y después la pasas a numero con la funcion "atoi(cadena_destino, cadena_fuente);"


Título: Re: Obtener primer integer de cada linea
Publicado por: piou en 23 Noviembre 2010, 22:38 pm
Puedes volcar la cadena a un array de chars y leer de letra en letra hasta que haya un espacio.


Título: Re: Obtener primer integer de cada linea
Publicado por: JuszR en 28 Noviembre 2010, 20:57 pm
Bueno pongo el código:
Código
  1. vector<int> vint;
  2. int n;
  3. string str;
  4. while(!haceCuenta.eof() && !haceCuenta.fail())
  5. {
  6. if(!isdigit(haceCuenta.peek()))
  7. {
  8. getline(haceCuenta, str);
  9. continue;
  10. }
  11. haceCuenta >> n;
  12. vint.push_back(n);
  13. getline(haceCuenta, str);
  14. }
  15. if(!haceCuenta.eof())
  16. {
  17. cout << "Error leyendo el archivo" << endl;
  18. return -1;      
  19. }
  20. int totalHoras=0;
  21. for(vector<int>::size_type x=0; x<vint.size(); ++x)
  22. {
  23. cout << setw(2) << vint[x] << endl;
  24. totalHoras += vint[x];
  25. }


Título: Re: Obtener primer integer de cada linea
Publicado por: piou en 28 Noviembre 2010, 21:04 pm
En vez de guardar la cadena introducida en un string (a mi no me gustan), guárdala en un char[], y luego recórrelo hasta encontrar un espacio


Título: Re: Obtener primer integer de cada linea
Publicado por: JuszR en 29 Noviembre 2010, 17:24 pm
¿Y se puede saber porqué no te gustan?


Título: Re: Obtener primer integer de cada linea
Publicado por: piou en 29 Noviembre 2010, 18:09 pm
Me da la sensación de que tengo menos control que con un array de chars, pero bueno, serán cosas mias XD. De todos modos en tu caso si lo haces como te he dicho sale más fácil