Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: Danielo515 on July 19, 2009, 12:16:43 PM

Title: Recorrer un archivo doblemente
Post by: Danielo515 on July 19, 2009, 12:16:43 PM
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
Title: Re: Recorrer un archivo doblemente
Post by: DCelso on July 19, 2009, 02:29:49 PM
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.
Title: Re: Recorrer un archivo doblemente
Post by: Danielo515 on July 19, 2009, 06:12:25 PM
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
Title: Re: Recorrer un archivo doblemente
Post by: DCelso on July 19, 2009, 09:42:27 PM
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.