Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: fuenteRea en 16 Octubre 2010, 02:34 am



Título: C++: Duda, Alternativa al IF:eof()
Publicado por: fuenteRea en 16 Octubre 2010, 02:34 am
Hola,

estoy leyendo de un fichero, en el momento en que leo la última línea, necesito hacer una operación, pero claro, no me lo permite porque la función eof() necesita una lectura adelantada, es decir, primero leo y después si hemos llegado al final salgo.

No sé si me he explicado bien, voy a poner mejor el código.

lista_procesos.inicio();
while(!lista_procesos.fin()){
       lista_procesos.consultar(d);
       if(((!d.ejecutado)||((d.ejecutado)&&(d.estado==preparado)))&&(!IF.eof())){
         d.tiempo_espera++;
         lista_procesos.borrar();
         lista_procesos.insertar(d);
      }
      lista_procesos.avanzar();
}

Quería que justo cuando haya llegado al final no haga eso, pero claro, el eof() necesita una lectura adelantada que si la hago me cargo el algoritmo. ¿Existe alguna función que haga justo lo que necesito?.

Un saludo!!
PD: Estoy desesperadisimo ya. jeje


Título: Re: C++: Duda, Alternativa al IF:eof()
Publicado por: Oblivi0n en 16 Octubre 2010, 13:51 pm
No entiende lo que dices, quieres cuando el programa haga la comparacion del if, compruebe si IF es = EOF  o no?


Título: Re: C++: Duda, Alternativa al IF:eof()
Publicado por: fuenteRea en 16 Octubre 2010, 16:47 pm
hola,

si, el problema esta en que cuando ha leido la última línea completa si llamo a la funcion eof() me devolverá false, porque no sabe que en la siguiente línea se termina el fichero. Para que me devolviera true tendría que llamar a getline, pero si lo hago, me cargo el algoritmo. necesitaría una función que haga lo mismo que eof() pero sin necesitar antes la llamada al getline.

un saludo!!


Título: Re: C++: Duda, Alternativa al IF:eof()
Publicado por: do-while en 17 Octubre 2010, 07:05 am
¡Buenas!

La solucion la veo bien sencilla.

Código:
Leer fichero

Si no fin fichero
{
    ejecutas lo que quieras
}
Sino
{
    Acciones en caso de alcanzar fin fichero.
}

Tan sencillo como esto.

¡Saludos!


Título: Re: C++: Duda, Alternativa al IF:eof()
Publicado por: fuenteRea en 17 Octubre 2010, 13:38 pm
Vuelvo a repetir porque no sé si es que me explico muy mal o es que no se me lee xD que desastre!!

¡Buenas!

La solucion la veo bien sencilla.

Código:
Leer fichero

Si no fin fichero
{
    ejecutas lo que quieras
}
Sino
{
    Acciones en caso de alcanzar fin fichero.
}

Tan sencillo como esto.

¡Saludos!

eso no se puede hacer, y te explico por qué

Imaginemos que tenemos un fichero con una línea de datos que queremos recuperar.

Sin leer la línea--> LLamamos a la función eof() y nos devuelve false, como es normal.

Leemos la primera línea, primera y única. Llamamos al getline y a continuación llamamos a eof() y nos devuelve FALSE!!!! porque necesita una lectura más. es decir:

Si intentamos leer una nueva línea como no hay ahora es cuando eof devuelve TRUE.

¿Tan dificil es entender lo que digo?
un saludo!!


Título: Re: C++: Duda, Alternativa al IF:eof()
Publicado por: BOFH en 17 Octubre 2010, 15:09 pm
Para leer un carácter sin consumirlo se utiliza el método peek() de la clase istream.

Más info: http://www.cplusplus.com/reference/iostream/istream/peek/

Un saludo.


Título: Re: C++: Duda, Alternativa al IF:eof()
Publicado por: do-while en 17 Octubre 2010, 20:41 pm
Vuelvo a repetir porque no sé si es que me explico muy mal o es que no se me lee xD que desastre!!

eso no se puede hacer, y te explico por qué

Imaginemos que tenemos un fichero con una línea de datos que queremos recuperar.

Sin leer la línea--> LLamamos a la función eof() y nos devuelve false, como es normal.

Leemos la primera línea, primera y única. Llamamos al getline y a continuación llamamos a eof() y nos devuelve FALSE!!!! porque necesita una lectura más. es decir:

Si intentamos leer una nueva línea como no hay ahora es cuando eof devuelve TRUE.

¿Tan dificil es entender lo que digo?
un saludo!!

¬¬

Revisa el pseudo que te he dejado y comprueba que es lo que hace con el ejemplo que me has puesto

Código:
Leer fichero //cargo la linea del fichero

EOF?
No -> Proceso la informacion

//Ahora ya no queda informacion en el fichero
Leer fichero //No hay informacion y se activa EOF

EOF?
Si -> Las acciones que quieras

¿No era tan complicado no? Si leer lo que ponen los demas tampoco cuesta tanto.

¡Saludos!


Título: Re: C++: Duda, Alternativa al IF:eof()
Publicado por: fuenteRea en 17 Octubre 2010, 23:04 pm
Hola,

voy a dejar este tema porque creo que no se me entiende.

Vamos a ver la función eof() necesita una lectura adelantada.

Es decir si recupero la ultima linea de un fichero, a menos que intente recuperar otra, la función eof() va a seguir devolviendo false.

Repito no puedo hacer esa lectura porque me cargo el algoritmo. Por favor, entiendelo.

La otra solución sería hacerlo una vez terminada la lectura, pero no puede ser porque me modifica ciertos atributos de ciertos objetos que no quiero que los haga ahi, si no antes, justo cuando lea la última línea. y con el dato de la última línea solamente.

si hago el if else que propones, no tiene sentido, ya que estaría en el problema anteriormente mencionado y repetido 3 veces. Si hago el if else cuando llegue al else me va a modificar todos los procesos, y solo quiero que me modifique el de la última línea del fichero. y no puedo poner otra condición porque el fichero puede tener 1, 2 ,3 etc líneas. Y no puedo comparar con nada puesto que los procesos pueden ser identicos.

No se si ya queda más claro.

PD gracias de todas maneras, es complicado, creo que tendré que replantearme el código y ya está.

un saludo!!