Autor
|
Tema: C++: Duda, Alternativa al IF:eof() (Leído 5,404 veces)
|
fuenteRea
Desconectado
Mensajes: 2.709
Volver a ser un niño
|
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
Mensajes: 392
Odio las ranas.
|
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
Mensajes: 2.709
Volver a ser un niño
|
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
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
¡Buenas! La solucion la veo bien sencilla. 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
Mensajes: 2.709
Volver a ser un niño
|
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. 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...
|
|
|
|
do-while
Desconectado
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
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 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
Mensajes: 2.709
Volver a ser un niño
|
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...
|
|
|
|
|