Ver Mensaje Individual
  #4 (permalink)  
Antiguo 11/12/2013, 05:43
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 4 meses
Puntos: 83
Respuesta: regresar al inicio de un fichero c++

"...sigue sin leerme la primera linea..."

El problema no es que no te lea la primera linea, sino que el ciclo que cuenta las lineas está contando mientras fstream::eof sea cierto, es decir que antes de la primera linea termina el ciclo; lo que tu quieres es leer mientras eof sea falso, revisa tu manual de c++ :

Código C++:
Ver original
  1. while(!archivo.eof()) {
  2.     getline(archivo, linea);
  3.     cantidadLineasTxt++;
  4. }

Luego de esto viene lo del seekg que tenias que haver revisado en tu manual de c++ y habrias visto esto:

Código C++:
Ver original
  1. archivo.clear();
  2. archivo.seekg(0, archivo.beg);

Y diras: y el clear?? Bueno es algo de cuando el puntero de lectura llega al final del archivo cualquier operacion se cancela, incluidos los desplazamientos; con el clear limpio los flags de estado para que seekg pueda funcionar.

Y luego haces otro bucle para cargar las lineas igual que el primero. Y cuando terminas de usar el puntero al archivo debes cerrarlo con close().

Hasta aquí ok? Ahora otra cosa, planteate ahorrar algo de tiempo y no recorrer dos veces todo el archivo usando algun tipo de lista; te pongo un ejemplo con vector:

Código C++:
Ver original
  1. ifstream archivo;
  2. vector <string> lineas;
  3. string linea;
  4.  
  5. archivo.open("SumaDificil.txt");
  6.  
  7. if(!archivo.fail()) {
  8.     while(!archivo.eof()) {
  9.         getline(archivo, linea);
  10.         if(linea.length()) {
  11.             lineas.push_back(linea);
  12.         }
  13.     }
  14. }
  15.  
  16. archivo.close();
  17.  
  18. for(int q = 0; q < lineas.size(); q++) {
  19.     cout << q << "-. " << lineas[q] << endl;
  20. }
  21. lineas.clear();

Con un solo while cargas todas las lineas (implicito el nº de lineas) y cierras el archivo. Cualquier otra operacion la haces sobre el vector.

Una ultima cosa: la cabecera de windows para que la usas? Para el system? Puedes usar cin.get() para hacer lo mismo y quitar windows.h

Saludos
vosk