• Publicidad

Leer archivos dentro de una carpeta

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Leer archivos dentro de una carpeta

Notapor gonzalipto » 2011-04-18 09:14 @427

¡Hola amigos programadores!
Tengo la siguiente necesidad:

Deseo leer todos los archivos que contenga una carpeta para abrirlos y parsearlos y poder guardar ciertos datos que contienen. No sé cuántos archivos hay dentro de la carpeta de antemano por lo que seguramente debo usar un while().

Aquí detallo en pseudo-codigo lo que deseo realizar:

while (Leo archivos desde el directorio X)
{
Abrir archivo i;
Leer el archivo en busca de cierto patrón;
Escribir el patrón en un archivo de salida;
cerrar archivo i ;
i++;
}

i sería la cantidad de archivos dentro de mi directorio, pero i es un número que no conozco de antemano salvo que exista una función para contar cuántos archivos hay dentro de un directorio (que no la conozco).

Saludos y espero puedan ayudarme.

Gonza
gonzalipto
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2011-04-18 08:59 @416

Publicidad

Re: Leer archivos dentro de una carpeta

Notapor explorer » 2011-04-18 09:33 @439

Bienvenido a los foros de Perl en español, gonzalipto.

Puedes usar la terna opendir(), readdir() y closedir() para leer el contenido de un directorio.

Más información en

perldoc -f opendir
perldoc -f readdir
perldoc -f closedir
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Leer archivos dentro de una carpeta

Notapor gonzalipto » 2011-04-18 16:05 @711

¡Gracias! Probé la función opendir() y readdir(), pero me sale un error.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. use strict;
  3.  
  4. my $some_dir= "/home/gonzalo/Desktop/prueba";
  5. opendir(my $dh, $some_dir) || die;
  6.  
  7. while(readdir $dh)
  8. {
  9. print $_;
  10. }
  11.    
  12. closedir $dh;
  13.  
  14. #final del script
  15.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Y me da el siguiente error:

Use of uninitialized value $_ in print at DirectoryReader.pl line 11.

¿Alguna idea de qué puede ser? ¿No tendría que guardar el valor de cada lectura dentro de la variable $_?
gonzalipto
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2011-04-18 08:59 @416

Re: Leer archivos dentro de una carpeta

Notapor explorer » 2011-04-18 16:23 @724

La construcción

while (readdir $dh) {

solo funcionará si estás ejecutando un Perl v5.11.2 o superior (es lo que dice la documentación de readdir()).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Leer archivos dentro de una carpeta

Notapor pvaldes » 2011-04-19 04:34 @232

Para buscar un patrón dentro de los archivos puedes usar grep

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @encontrados = grep { /ALGO/ } readdir($dh);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
pvaldes
Perlero nuevo
Perlero nuevo
 
Mensajes: 129
Registrado: 2011-01-22 12:56 @580


Volver a Básico

¿Quién está conectado?

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