Recorrer un archivo doblemente

Started by Danielo515, July 19, 2009, 12:16:43 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Danielo515

Estoy intentando recorrer un archivo doblemente mediante dos bucles while, la idea es por cada registro, leer todos los demás, pero el resultado es que no lee nada o que solo lo lee una vez. La verdad es que no tengo claro como interpreta bennu la marca de fin de archivo, sobre todo en archivos de texto, si está adjunto al último registro o va después. Por favor, que alguien me lo aclare.

[code language="bennu"]f1=fopen("temp",O_READ);
f2=fopen("temp",O_READ);
say("Listado");

fread(f1,linea);
    while(!feof(f1))
        say(linea);
        fseek(f2,sizeof(linea)*cont,0);
        fread(f2,linea2);
        while(!feof(f2))
                say(linea2+cont);
                fread(f2,linea2);
            end
        cont++;           
        fread(f1,linea);
        frewind(f2);
    end

fclose(f1);
fclose(f2);
       
end
[/code]

Lo he modificado, esto funciona en c pero no funciona en bennu. Ahora sí que no se me ocurre como hacerlo

Vale, ya he conseguido lo que quería. Lo dejo aquí por si a alguien le sirve de alluda, el código que eh posteado ya funciona perfectamente, o eso creo, un saludo

DCelso

Eso de leer dos veces un archivo es algo bastante ineficiente, siempre se debe intentar reducir al máximo las lecturas y escrituras en disco ya que son las instrucciones más lentas de un sistema operativo. Dependiendo de lo que intentes hacer te recomendaría otro algotirmo usando un buffer o array de chars en el que ir guardando temporalmente la lectura del fichero y así solo tener que recorrerlo para leer una sola vez y luego si necesitas la información leerla del buffer.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Danielo515

El problema es que siempre lo vemos todo como si cupiera de sobra en la ram, y no siempre es así, ese era un error muy frecuente que cometía antes, pensar que con memoria dinámica podia alocar lo que me diera la gana, por larga que fuera la lista, y me da la impresión de que casi nunca es así.

Lo de los bufferes es una solución inteligente la verdad, aunque igualmente acabas leyendo una y otra vez para llenar el buffer, y muchas veces resulta muy pequeño y otras muy grande, pero a fin de cuentas son menos lecturas, que es lo que cuenta.

Lo miraré a ver como implementarlo

DCelso

Bueno, en teoría el sistema operativo cachea los archivos, así que en equipos  potentes, no haya direfencia al usar esta o la otra tecnica.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/