• Publicidad

File::Find Modulo

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

File::Find Modulo

Notapor Elhaz » 2006-03-15 22:34 @982

Que tal amigos, es la primera vez que envio un mensaje, y espero entiendan la pregunta.
estube haciendo practicas con este modulo y leyendo muy bien el tutorial que habla sobre este:
el codigo original y como aparece en el tut es este:
#!/usr/bin/perl

use strict;
use File::Find;

my $dir = 'C:/Perl/lib/';

find(\&imprimir_archivo, $dir);

sub imprimir_archivo{
my $elemento = $_;
print "$elemento\n" if -f $elemento;
}

bueno.. hasta ahi todo bien.. pero me entro la curiosidad con la variable que buscaba una cadena o letra en en especial de cualquier archivo.. el codigo con esta variable es este:

#!/usr/bin/perl

use strict;
use File::Find;

my $dir = 'C:/Perl/lib/';

find(\&imprimir_archivo_pl, $dir);

sub imprimir_archivo_pl{
my $elemento = $_;

if(-f $elemento && $elemento =~ /\.pl$/){
print "$File::Find::name\n";
}
}

todo muy bien, se puede ver q en la parte
if(-f $elemento && $elemento =~ /\.pl$/){ busca archivos q tengan al final .pl, pero me puse a hacer la practica.. q el programa pidiera la extencion del archivo al usuario y buscase los archivos con esta extension introducida por el usuario
e hice lo siguiente

#!/usr/bin/perl

use strict;
use File::Find;

my $dir = 'C:/Perl/lib/';
print "introduce la extension del archivo: \n";
my $ext=<STDIN>;
find(\&imprimir_archivo_pl, $dir);

sub imprimir_archivo_pl{
my $elemento = $_;

if(-f $elemento && $elemento =~ /\.$ext$/){
print "$File::Find::name\n";
}
}
la variable de entrada como se ve es $ext, pero al compilarlo no me da.. ame muestra efectivamente el mensaje de "introducir la extencion" pero no me muestra ningun archivo
alguien me podria decir q es lo que sucede.. si hay alguna parte en especial donde colocar

print "introduce la extension del archivo: \n";
my $ext=<STDIN>;

o lo he escrito mal.
Muchas gracias de antemano ;)
Elhaz
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2006-03-15 22:21 @973

Publicidad

Notapor kidd » 2006-03-15 23:37 @026

Hola:

En primera bienvenido al foro, ojalá y estés por aquí con nosotros haciendo tus preguntas de Perl :wink:

En cuanto a tu código va todo bien, solamente te falto un pequeño detalle. Cuando pides la extensíón está va a venir con el newline, por ejemplo si alguien pone:

Código: Seleccionar todo
pl


Tu variable realmente va a contener:

Código: Seleccionar todo
pl\n


Esto lo solucionamos haciendo un sencillo chomp(), por lo que tu código quedaría como:

Código: Seleccionar todo
#!/usr/bin/perl

use strict;
use File::Find;

my $dir = 'C:/Perl/lib/';

print "Introduce la extension del archivo: \n";
  my $ext=<STDIN>;

#Quitamos el \n final
  chomp($ext);

find(\&imprimir_archivo_pl, $dir);

sub imprimir_archivo_pl{

    my $elemento = $_;

        if(-f $elemento && $elemento =~ /\.$ext$/){
            print "$File::Find::name\n";
        }
}




Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor Elhaz » 2006-03-16 00:29 @061

Muchas Gracias Kidd
hice lo q me dijiste y quedo perfecto
por otra parte... q buen servicio del Foro. "Respuestas Istantaneas" :D
Gracias de nuevo, animas a seguir aportando y preguntando en el foro :D
Elhaz
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2006-03-15 22:21 @973

Notapor kidd » 2006-03-16 00:30 @063

Elhaz escribiste:por otra parte... q buen servicio del Foro. "Respuestas Istantaneas" :D


Jajaja, ya ves, ¿qué más nos queda?


Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor Elhaz » 2006-03-18 00:12 @050

Que tal amigos, disculpen si les molesto :p. pero es q la curiosidad no deja..
siguiendo con el tema de File::Find..
me dio por añadirla al programa, la opcion de q el usuario introdujera el directorio en el que quiere buscar tal archivo, con tal extencion, el codigo quedo asi:

#!c:/perl/bin/perl

use strict;
use File::Find;

print "Introduce el Directorio en el que euiqres buscar:\n";
my $dir = <STDIN>;
chomp($dir);

print "Introduce la extension del archivo: \n";
my $ext=<STDIN>;
chomp($ext);

find(\&imprimir_archivo_pl, $dir);

sub imprimir_archivo_pl{

my $elemento = $_;

if(-f $elemento && $elemento =~ /\.$ext$/){
print "$File::Find::name\n";
}
}

todo perfecto, el codigo quedo perfecto, pero la pregunta es.. como puedo hacer que el Script busque solo en la direccion que el usuario inserto..
porq el script busca en el directorio que uno introduce y los subdirectorios de este.. ejm..

le decimos que busque en c:\windows\system32... y efecticamente lo hace.. pero tambien busca en los subdirectorios que tiene system32.
la idea es que busque solo en el directorio system32.
Bueno muchas gracia de antemano ;)
Elhaz
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2006-03-15 22:21 @973

Notapor kidd » 2006-03-18 00:48 @075

En ese caso con un simple opendir puedes lograr lo que quieres:

Código: Seleccionar todo
#!c:/perl/bin/perl

use strict;


#Preguntamos por un directorio hasta que den uno válido
my $dir = '';

while(!-d $dir){
    print "Introduce el directorio en el que quieres buscar (incluye el / final):\n";
    $dir = <STDIN>;
    chomp($dir);
}

#Nos movemos al directorio seleccionado
chdir($dir);


#Pedimos la extensión del archivo
print "Introduce la extension del archivo: \n";
my $ext=<STDIN>;
chomp($ext);


#Buscamos los archivos con la extensión deseada
opendir(DIR, "$dir") || die "can't opendir: $!";
    while(my $file = readdir(DIR)){

        if(-f $file && $file =~ /\.$ext$/){
            print "$file\n";
        }
    }
closedir DIR;


Aparte de ello le incluí un pequeño detalle, para que no andes buscando en directorios que no existen :wink:

Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 0 invitados