Ayuda en C - Invertir el orden de un fichero

NiBeLHe1M

Si tengo un fichero con un texto tipo:
no
me funciona
la mierda
de programa

Necesito invertirlo para que quede:
de programa
la mierda
me funciona
no

He probado con la funcion rewind, pero debe haber algo que se me escapa, porque no soy capaz de hacerlo funcionar correctamente :s

r2d2rigo

Confia en la recursion!

char linea[512];

void inviertefichero()
{
if (!eof(fichero))
{
leerlinea(linea);
inviertefichero();
}
else
{
escribelinea(linea);
}
}

O algo asi. Si usases ficheros de C++ seria mas facil :P

Czhincksx

Creo que #2 tiene razón con lo de la recursividad, pero me parece que ese programa no funcionaría. Si es el caso base, no hay niguna linea para leer. Yo lo haría con esta estructura:

void InvertirFichero(){

LeerLinea(linea);

if(fin de fichero) imprimir (linea);
else {
InvertirFichero();
imprimir (linea);
}
}

Czhincksx

Se me ha ocurrido que necesitarías un puntero global para leer la linea siguiente de forma recursiva, así que mejor te sugiero una lista enlazada de lineas. Eso está tirado y lo solucionas fijo.

puntero a lista ----> elementoN----> elementoN-1---->...--->elemento1---->elemento0

Y para insertar:

elementoN+1--->elementoN
puntero a lista --->elementoN+1

Donde cada elemento sea una estructura con un puntero a estructura y una cadena de caracteres.

NiBeLHe1M

Si es que me he emparanoiao intentado sacar el programa con la funcion rewind (en el enunciando aconsejan usarla) pero algun detalle se me debe escapar y no soy capaz de invertir todo el texto.

De todas formas, ayer un amigo me paso el ejercicio (con un codigo similar al que estabais comentando) y funciona perfect.

Gracias por el interes :)

Usuarios habituales

  • NiBeLHe1M
  • Czhincksx
  • r2d2rigo