Mie Oct 08, 2008 12:10 pm
|
 |
guly
Perlero Nuevo

|
Registrado: 08 Oct 2008
Mensajes: 2
|
|
| Lectura de directorios en array |
|
|
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. |
|
|
|

Mie Oct 08, 2008 2:04 pm
|
 |
monoswim
Vive para Perl en Español

|
Registrado: 18 Nov 2003
Mensajes: 720
Ubicación: Buenos Aires
|
|
|
|
|
¿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
Espero que te sirva
Saludos |
|

Mie Oct 08, 2008 3:38 pm
|
 |
guly
Perlero Nuevo

|
Registrado: 08 Oct 2008
Mensajes: 2
|
|
|
|
|
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.... |
|

Powered by phpBB © 2001, 2005 phpBB Group
|