Ver Mensaje Individual
  #5 (permalink)  
Antiguo 11/12/2013, 15:04
baterista41
 
Fecha de Ingreso: junio-2012
Mensajes: 32
Antigüedad: 11 años, 11 meses
Puntos: 1
De acuerdo Respuesta: regresar al inicio de un fichero c++

Cita:
Iniciado por vosk Ver Mensaje
"...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


Muy interesante todo amigo,cierto todo lo que mencionas en tu codigo ,aprendi varias cosas de verdad muchas gracias