Mie Mar 15, 2006 9:34 pm
|
 |
Elhaz
Perlero Nuevo

|
Registrado: 15 Mar 2006
Mensajes: 3
|
|
| File::Find Modulo |
|
|
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  |
|
|
|

Mie Mar 15, 2006 10:37 pm
|
 |
kidd
Creador de Perl en Español

|
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
|
|
|
|
|
Hola:
En primera bienvenido al foro, ojalá y estés por aquí con nosotros haciendo tus preguntas de Perl
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:
Tu variable realmente va a contener:
Esto lo solucionamos haciendo un sencillo chomp(), por lo que tu código quedaría como:
| Código: |
#!/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 |
|

Mie Mar 15, 2006 11:29 pm
|
 |
Elhaz
Perlero Nuevo

|
Registrado: 15 Mar 2006
Mensajes: 3
|
|
|
|
|
Muchas Gracias Kidd
hice lo q me dijiste y quedo perfecto
por otra parte... q buen servicio del Foro. "Respuestas Istantaneas"
Gracias de nuevo, animas a seguir aportando y preguntando en el foro  |
|
Mie Mar 15, 2006 11:30 pm
|
 |
kidd
Creador de Perl en Español

|
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
|
|
|
|
|
| Elhaz escribió: | por otra parte... q buen servicio del Foro. "Respuestas Istantaneas"  |
Jajaja, ya ves, ¿qué más nos queda?
Saludos |
|

Vie Mar 17, 2006 11:12 pm
|
 |
Elhaz
Perlero Nuevo

|
Registrado: 15 Mar 2006
Mensajes: 3
|
|
|
|
|
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  |
|

Vie Mar 17, 2006 11:48 pm
|
 |
kidd
Creador de Perl en Español

|
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
|
|
|
|
|
En ese caso con un simple opendir puedes lograr lo que quieres:
| Código: |
#!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
Saludos |
|
Powered by phpBB © 2001, 2005 phpBB Group
|