Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Lectura de directorios en array

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico
Mensaje Mie Oct 08, 2008 12:10 pm
guly
Perlero Nuevo
Perlero Nuevo
Registrado: 08 Oct 2008
Mensajes: 2
Lectura de directorios en array Responder citando

Muchachos, ¿me pueden ayudar? Tengo que leer el directorio de My Music de Windows y rescatar todos los .mp3 y cargarlos a un array... yo hice esto, ustedes me lo pueden corregir,

Perl:
sub generador() {

        use Data::Dumper::Names;
        use File::Find::Rule;
        use File::Basename;
        use strict;
       
       
       
        #my $directorio = 'C:\\Documents and Settings\\user\\Mis documentos\\Mi música\\';
        #chdir $directorio;
        my $dir='C:\\Documents and Settings\\user\\Mis documentos\\Mi música\\';
        my @tema;
        my $midato;
        if (opendir(DIR,"$dir")){
       
        @tema=readdir(DIR);
        close DIR;
        foreach (@tema){ 
   # ignorar . y .. :  EN EL LINUX EL . .  ERA UN ENLACE SIMBOLICO Y EL . INDICABA  QUE SE TRATABA DE UN DIRECTORIO SERIA ASI ??????
   
   #$_ PERL CREA ESTA VARIABLE DE BUCLE AUTOMATICAMENTE
        next if ($_ eq "." || $_ eq "..")
        if (/$ARGV[0]/io){ 
        print "$dir/$_\n"
        } 
        generador("$dir/$_") if (-d "$dir/$_" && ! -l "$dir/$_")
        }        
        }else{ 
        print "ERROR: no se puede leer el directorio $dir\n"
        }
        # @temas = splice (@tema);
        my @temas;
        my $n;
        my $ind;
        $ind = 0;
        for ($n = 0; $n < @tema; $n++) {
        #
        #
        #COMO HAGO PARA COMPARA SI EL TEMA TIENE EL .MP3 Y LO GUARDO EN EL NUEVO ARRAY, CON LA PREGUNTA QUE LE CLAVE EN MI DATO ESTA BIEN ??????? YO NO LO PUEDO PROBAR
        if ( $tema[$n] &&( #  ASI $midato=~/\.mp3$/  O ASI  pff \'\\.mp3\'  )) {
        $ind++;
        $temas [$ind] = $tema[$n];
        }       
        else {
       
        }
        }
        return (@temas);
       
}


He sacado un par de cosas del foro pero no me doy cuenta cómo... es una función para un servidor de mp3...

Desde ya, gracias por su ayuda y sepan disculpar las molestias.
Mensaje Mie Oct 08, 2008 2:04 pm
monoswim
Vive para Perl en Español
Vive para Perl en Español
Registrado: 18 Nov 2003
Mensajes: 720
Ubicación: Buenos Aires
Responder citando

¿Por qué colocas \\ en las direcciones?

Coloca directamente los espacios...

Otra cosa: ¿el for lo haces para que no haya repetidos? Puedes usar la función grep() que sería más fácil...

Si quieres solo saber si es mp3 haces
Perl:
if ($tema =~m/\.mp3/){


Espero que te sirva

Saludos
Mensaje Mie Oct 08, 2008 3:38 pm
guly
Perlero Nuevo
Perlero Nuevo
Registrado: 08 Oct 2008
Mensajes: 2
Responder citando

gracias por tu respuesta aca te envio lo nuevo que hice.....

Perl:

sub generador() {
        my $tmp;
        my $tmpdir;
        $tmpdir = "C:\\Documents and Settings\\user\\Mis documentos\\Mi música\\";
        #my $tmpdir = shift;
        my @list;
        my @tmp2;
        my $a;
        my $arreglo;
        print "Hola/....\n";
        opendir(DIR,$tmpdir) or die "No existe el dir";
        $a=readdir(DIR);
    while (defined $a){
                $tmp=$tmpdir."".$a;
                #Pregunto si es directorio y si es verdad vuelvo a llamar a la funcion ESTO DE LA RECURSIVIDAD NO ME ANDA AYUDA????????
                #if (-d $tmp) {
                #@tmp2 = generador($tmp);
                #push (@list,@tmp2);
                #}
                #Pregunto si es archivo y si lo es  si su extension es .mp3 y le hago un push
                if ((-f $tmp) && ($tmp=~/\.mp3$/ ) || ($tmp=~/\.MP3$/ ) || ($tmp=~/\.Mp3$/ )) {
                push (@list,$tmp);
                }
                 $a=readdir(DIR);
        }
       
        close(DIR);
               
        return(@list);
}       



es de un servidor de mp3, si queres te subo todo el servidor completo, ya que ahora no me anda...
desde el servidor lo llamo asi, no me corrigen si esta mal o bien...

Perl:



sub escuchando {
        #my $dir1='C:\\Documents and Settings\\user\\Mis documentos\\Mi música\\';
        my @songs;
    my $socket = shift;
  #levanto la lista
    my $dir = 'C:\\servidor streaming\\guns hits\\';
    chdir $dir;
        my $bol;
    if (open (PLAYLIST, "lis.m3u")) {
        open (PLAYLIST, "lis.m3u");
        @songs =<PLAYLIST>;
        shift @songs;
        close (PLAYLIST);
        }
        else {
        @songs = generador();
        shift @songs;
        }
       
    #creo un loop eterno hasta que el cliente deje de escuchar
 my $indice;
        for ($indice = 0; $indice < @songs; $indice++) {
       
        #Mandar el header necesario
                print $socket "HTTP/1.0 200 OK\n";
                print $socket "Content-Type: text/html\n";
                print $socket "Cache-Control: no-cache \n";
                print $socket "Pragma: no-cache \n";
                print $socket "Connection: close \n";
                print $socket "Aplication: The best of the Reproducer\n\n";

        #seleccionar una cancion aleatoria de tu lista
                my $song = $songs[rand @songs];

        #que cancion estamos tocando
        warn ( "play song: $song\n");

        #abrir la cancion o intentar con otra
        open (SONG, $song) || next;
        binmode(SONG);
                #para usuarios de windows
        my $read_status = 1;
        my $print_status = 1;
        my $chunk;

        #Esta parte imprime el binario al socket
        #Lo hace lo mas rapido posible
        while( $read_status && $print_status ) {
          $read_status = read (SONG, $chunk, 1024);
           if( defined $chunk && defined $read_status) {
                $print_status = print $socket $chunk;
          }
            undef $chunk;
        }
        close SONG;
        unless( defined $print_status ){
               $socket->close();
               exit(0);
        }
    }
       
}


gracias a todos y espero su pronta respuesta ya que lo que estoy preparando es un final de facultad y estoy hasta las manos....
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group