elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  C++: Duda, Alternativa al IF:eof()
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: C++: Duda, Alternativa al IF:eof()  (Leído 5,149 veces)
fuenteRea


Desconectado Desconectado

Mensajes: 2.709


Volver a ser un niño


Ver Perfil
C++: Duda, Alternativa al IF:eof()
« 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


« Última modificación: 16 Octubre 2010, 12:24 pm por thedoctor77 » En línea

Una rosa es una rosa...
Oblivi0n


Desconectado Desconectado

Mensajes: 392

Odio las ranas.


Ver Perfil
Re: C++: Duda, Alternativa al IF:eof()
« Respuesta #1 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?


En línea

fuenteRea


Desconectado Desconectado

Mensajes: 2.709


Volver a ser un niño


Ver Perfil
Re: C++: Duda, Alternativa al IF:eof()
« Respuesta #2 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!!
En línea

Una rosa es una rosa...
do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: C++: Duda, Alternativa al IF:eof()
« Respuesta #3 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!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
fuenteRea


Desconectado Desconectado

Mensajes: 2.709


Volver a ser un niño


Ver Perfil
Re: C++: Duda, Alternativa al IF:eof()
« Respuesta #4 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!!
En línea

Una rosa es una rosa...
BOFH

Desconectado Desconectado

Mensajes: 2



Ver Perfil
Re: C++: Duda, Alternativa al IF:eof()
« Respuesta #5 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.
En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: C++: Duda, Alternativa al IF:eof()
« Respuesta #6 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!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
fuenteRea


Desconectado Desconectado

Mensajes: 2.709


Volver a ser un niño


Ver Perfil
Re: C++: Duda, Alternativa al IF:eof()
« Respuesta #7 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!!
« Última modificación: 18 Octubre 2010, 00:41 am por thedoctor77 » En línea

Una rosa es una rosa...
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[DUDA] ¿PHP es viejo? ¿Alternativa a PHP?
PHP
GGZ 6 5,912 Último mensaje 14 Octubre 2016, 23:20 pm
por [u]nsigned
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines