• Publicidad

Modulo find

¿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.

Modulo Find

Notapor julruiz » 2005-09-26 11:54 @538

Me he leido el tutorial del modulo File, y me ha funcionado a la perfección, sin embargo modifique el codigo para que todos los archivos que encuentre en un directorio no me los muestre en pantalla, sino que los guarde en un archivo, el siguiente es el codigo que implemente...

#!C:\perl\bin\perl.exe -w

use strict;
use File::Find;

my $dir='c:/Perl/lib/';
find(\&listado_archivos,$dir);

sub listado_archivos {
open ARCHIVOS,">archivos.txt";
my $elemento=$_;
print ARCHIVOS "$File::Find::name\n";
close(ARCHIVOS);
}


pero al ejecutarlo no me guarda el listado de todos los archivos sino el ultimo que encontro...

como hago para que me funcione correctamente?

gracias..
julruiz
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2005-09-11 20:55 @913

Publicidad

Notapor explorer39 » 2005-09-26 14:45 @656

Cambia de sitio un par de líneas y quita otra que sobra...
Código: Seleccionar todo
#!C:\perl\bin\perl.exe -w

use strict;
use File::Find;

my $dir='c:/Perl/lib/';
open ARCHIVOS,">archivos.txt";
find(\&listado_archivos,$dir);
close(ARCHIVOS);

sub listado_archivos {
print ARCHIVOS "$File::Find::name\n";
}
Resulta que File::Find ejecuta la función listado_archivos por CADA fichero que encuentre en el directorio.
Lo que tenías puesto era que cada vez que encontraba un fichero, abrías el fichero de salida en modo escritura, y claro, la siguiente búsqueda sobreescribía a la anterior.
Ahora, lo que hace es abrir el fichero, buscar -y por cada uno que encuentra, hace un print-, y luego lo cierra.
explorer39
 

gracias y otra pregunta

Notapor julruiz » 2005-09-27 16:20 @722

gracias... me ha funcionada a la perfeccion....

pero tengo otra duda... a continuacion el codigo...

&links;
&imagenes;

#funcion que guarda en un archivo los links de una pagina
sub links {
open FILE,"pagina.txt";
open LINKS,">links.txt";

while(my $line=<FILE>) {
if(my @links=$line=~/(\<a.*?\/a\>)/ig)
{
print LINKS "$_\n" foreach @links;
}
}
close(LINKS);
close(FILE);
}

#funcion que guarda en un archivo las imagenes de una pagina
sub imagenes {
open FILE,"pagina.txt";
open IMG,">imagenes.txt";

while(my $line=<FILE>) {
if(my @imagenes=$line=~/(\<img.*?\>)/ig)
{
print IMG "$_\n" foreach @imagenes;
}

}
close(IMG);
close(FILE);
}


en el anterior codigo tengo dos rutinas una para detectar los links y la otra para detectar las imagenes de una pagina... pero lo que no me gusta del codigo es que en cada subrutina me toca abrir el archivo pagina.txt.... ya que si lo hago de la siguiente manera ...

open FILE,"pagina.txt";
&links;
&imagenes;
close(FILE);


solo me detecta los links... como hago para que cuando llame a la rutina imagenes esta tome el archivo pagina.txt pero desde la primera linea pero sin tener que volver a abrirlo....

gracias
julruiz
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2005-09-11 20:55 @913

Notapor kidd » 2005-09-27 17:59 @791

Hola:

Podrías intentar lo siguiente:

Código: Seleccionar todo
open FILE,"pagina.txt";
links();
   seek(FILE,1,0);  #Regresa a la primera posición de <FILE>
imagenes();
close(FILE);



NOTA: Es de buen uso que cuando hagas las llamadas de tus funciones uses nombre_funcion(), en vez de &nombre_funcion;

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

Gracias

Notapor julruiz » 2005-09-27 22:53 @995

Hey excelente era justo lo que necesitaba....
julruiz
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2005-09-11 20:55 @913

Modulo find

Notapor julruiz » 2005-10-17 11:44 @530

Hola a todos...

Me he leido el tutorial del modulo find, y todo me ha salido bien...

pero necesito guardar en una variable solo la ruta de un directorio, en otro el nombre del archivo y en otra variable el tamaño del archivo...

como lo hago?
julruiz
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2005-09-11 20:55 @913

Notapor explorer39 » 2005-10-17 11:52 @536

Yo utilizaría el módulo File::Basename para eso. Y en cuanto al tamaño, usa el operador -s.
explorer39
 


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 7 invitados

cron