C/Visual C - Leer fichero al revés con fseek

 
Vista:

Leer fichero al revés con fseek

Publicado por Novato (3 intervenciones) el 10/05/2007 15:11:19
Cómo puedo leer las líneas de un fichero empezando desde la última y ascendiendo? Se que hay que usar la función fseek, pero no encuentro ningún ejemplo de como leer al revés un fichero (de fin a principio).

Cómo puedo hacerlo?

Salu2
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Leer fichero al revés con fseek

Publicado por Diego (13 intervenciones) el 10/05/2007 18:42:36
Buenas. Una forma que se me ocurre pero nose si funcionara es utilizando fseek y ftel (ambas en stdio.h). Por ejemplo:

fseek(f,0,SEEK_END); /* Posiciona el puntero al final del archivo */

while((pos = ftell(f)) { /* Es verdad mientras haya registros */
fseek(f, -1, pos); /* Posiciona el puntero en el registro anterior */
/* Hacer lo que se tenga que hacer */
}


PD: vuelvo a repetir NO TENGO IDEA SI FUNCIONA, es la primera vez que hago esto y nunca lo probe. Tampoco me imagino cuando podes usar esto.

Saludos, Diego
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Leer fichero al revés con fseek

Publicado por Novato (3 intervenciones) el 11/05/2007 08:33:50
Gracias por tu ayuda Diego, pero tengo una duda, al hacer fseek(f,-1,pos) no estoy diciéndole que se ponga 1 byte antes del final del fichero?

Lo que quiero es ponerme al principio de la línea (la longitud de la misma puede variar de una línea a otra) y leerla completa, luego pasar a la línea anterior, así hasta el principio del fichero.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Leer fichero al revés con fseek

Publicado por Nelek (816 intervenciones) el 11/05/2007 11:01:12
Hola,

entonces lo que tendras que hacer es irte al final y guardar la posicion "fin", ir leyendo cada byte hacia atras hasta encontrar la marca "fin de linea" de la linea anterior. Tomar la posicion siguiente a dicha marca como "principio", volver a leer (esta vez guardando los datos en donde quieras) hasta llegar a la marca final. Moverte otra vez a la marca "principio" introducir el valor en la marca "fin" y repetir el proceso de busqueda hasta el salto de linea anterior para volver a empezar.

O bien, otra opcion es leer una vez el fichero desde el principio hasta el final, guardando en un Array de DWORDs las posiciones donde haya un "salto de linea". Una vez hecho eso, irte a la penultima posicion y leer normal hasta la ultima, irte a la antepenultima y leer hasta la penultima y asi asi... hasta que llegues al principio del fichero y leas hasta el primer salto de linea.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Leer fichero al revés con fseek

Publicado por Novato (3 intervenciones) el 14/05/2007 09:46:26
Muchas gracias por vuestra ayuda. Lo haré de esa manera.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar