Ayuda con glob

Started by josebita, September 09, 2009, 11:30:58 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

josebita

Ando retocando el karaoke y me he encontrado que las rutinas de determinación del charset de los ficheros no funcionan como deberían. Me explico:
El tema es que cada vez que le pido que determine el charset de un fichero de texto, la rutina debería leer los nombres de todos los ficheros del directorio "charset_finder", abrirlos y buscar los caracteres en ellos contenidos (que estarán codificados con la codificación que da nombre al fichero) dentro del fichero cuyo charset le he pedido que determine.

Pues resulta que sólo recorre el directorio charset_finder la primera vez. El resto de veces salta directamente al charset por defecto cuando ninguno coincide (es como si no viera los ficheros).

Adjunto parte del código en forma probable. El fichero de prueba es "tonto.prg", el resto los adjunto para comprobar la funcionalidad.

Si alguien me puede echar una mano, se lo agradecería.

PD: He renombrado el adjunto de ".tar.gz" a ".zip" para poder adjuntarlo. Depende de lo listo que sea el descompresor que useis, quizás haya que renombrarlo...

PD2: Estoy con la última versión de Bennu liberada.

SplinterGU

disculpame, esta vez no voy a poder ayudar, estoy un poco complicado por los proximos 2 meses con proyectos personales...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

josebita

Ok, no te preocupes. Ánimo con esos proyectos.

Si alguien más me puede echar una mano, lo agradecería.

josebita

#3
Bueno, por si alguien le quiere echar un ojo, aquí va un ejemplo mucho más simple que supongo que debería funcionar distinto de como lo hace:
[code language="bennu"]import "mod_say";
import "mod_dir";


Function main()
Begin
 while(glob("/*") != "")
   if(fileinfo.directory == TRUE && fileinfo.name != "." && fileinfo.name != "..")
     say(fileinfo.name);
   end;
 end;
 say("Done finding dirs");
 FRAME(0);   // Need to frame, to restart the glob file search
 while(glob("/*") != "")
   if(fileinfo.directory == TRUE && fileinfo.name != "." && fileinfo.name != "..")
     say(fileinfo.name);
   end;
 end;
 say("Done finding dirs");
End;[/code]

Y la salida es:
[code language="bash"]joseba@rescubuntu:bennugd-karaoke$ bgdi tonto
home
sys
mnt
var
srv
cdrom
root
tmp
usr
proc
sbin
dev
bin
lib
lost+found
media
opt
selinux
etc
boot
Done finding dirs
Done finding dirs[/code]
Cuando entiendo que debería ser:
[code language="bash"]joseba@rescubuntu:bennugd-karaoke$ bgdi tonto
home
sys
mnt
var
srv
cdrom
root
tmp
usr
proc
sbin
dev
bin
lib
lost+found
media
opt
selinux
etc
boot
Done finding dirs
home
sys
mnt
var
srv
cdrom
root
tmp
usr
proc
sbin
dev
bin
lib
lost+found
media
opt
selinux
etc
boot
Done finding dirs[/code]

PD: lo he probado contra la última revisión del svn (104) que es más moderna que la última build oficial.

panreyes

Doy fe. Hasta que sea arreglado el parche es hacer un glob a otro directorio y así seguro que reinicia el contador.

josebita

Gracias, Pixel, me estaba rayando...
Confirmo que el siguiente código sí funciona como debería:
[code language="bennu"]import "mod_say";
import "mod_dir";


Function main()
Begin
  while(glob("/*") != "")
    if(fileinfo.directory == TRUE && fileinfo.name != "." && fileinfo.name != "..")
      say(fileinfo.name);
    end;
  end;
  say("Done finding dirs");
  glob("/tmp/*");
  while(glob("/*") != "")
    if(fileinfo.directory == TRUE && fileinfo.name != "." && fileinfo.name != "..")
      say(fileinfo.name);
    end;
  end;
  say("Done finding dirs");
End;[/code]

Prg

frame no reinicia el glob o si?

veo un frame(0) queriendo reiniciarlo... mmm
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

josebita


SplinterGU

yo te suguiero usas las nuevas funciones diropen, dirread, dirclose... manejas aperturas como si fueran handles de archivos, con lo que podes abrir varias a la ves y no necesitas resetear...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

¿No será que necesita un frame al 100%, o sea, FRAME o FRAME(100)?
No se, no lo he probado nunca.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

josebita

@Drumpi: He probado cambiando los valores de FRAME y el asunto no mejora.

@Splinter: Le echaré un ojo a las funciones, gracias.

Windgate

Hablé de esto con PiXeL hace un tiempo, no conocía la existencia de glob hasta entonces, y no he tenido ocasión de probarlo sorry.

Yo me quedé con la idea que dice Drumpi... Además tampoco conocía eso de FRAME(100) xD
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

SplinterGU

no entendi para que el FRAME?
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

josebita

Según el wiki (sandman me ha confirmado en el foro inglés que con la revisión 27 esto funcionaba así) si haces un FRAME mientras estás haciendo un glob en un directorio, el glob se reinicia y te vuelve a dar los archivos desde el principio.

SplinterGU

imposible... se equivoco... hay que corregir la wiki... frame nunca reseteo glob... ni siquiera en fenix...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2