• Publicidad

Abrir y copiar archivos a partir de listas

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

Abrir y copiar archivos a partir de listas

Notapor marioalbertocer » 2012-02-20 19:37 @859

Buenas noches,

He estado tratando de hacer un código en Perl que me permita tomar de una carpeta un número de archivos de texto y ponerlos en otra carpeta que se encuentra vacía. Para ésto tengo una lista de la carpeta 1 con todos los nombres de los archivos y tengo otra lista con solo los archivos que quiero pasar a la otra carpeta. El nombre de cada uno de los archivos está compuesto de cuatro partes y el problema es que las cuatro partes no concuerdan exactamente entre las dos listas, pero a mí solo me interesa que concuerden las dos primeras partes del nombre de cada uno de los archivos.

Este es el código que he estado haciendo, pero al final me crea en la carpeta vacía todos los archivos de la carpeta 1 pero sin ningún contenido (documentos en blanco).

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl;
  2.  
  3. open( LIST, "lista.txt" );
  4. @lista              = (<LIST>);
  5. @nombres_corregidos = nombrearchivo(@nombres);
  6. print "@nombres_corregidos\n";
  7. print @nombres_corregidos[1], "\n";
  8. foreach $nom (@lista) {
  9.     foreach $nombre_corregido (@nombres_corregidos) {
  10.         if ( $nom =~ /$nombre_corregido/ ) {
  11.             open( INFO, "archivos/$nom" );
  12.             open( M,    ">archivos2/$nom" );
  13.             @info = (<INFO>);
  14.             print @info;
  15.             print M @info;
  16.         }
  17.         else {
  18.             print "no existe $nom\n";
  19.         }
  20.     }
  21. }
  22. exit;
  23.  
  24. sub nombrearchivo {
  25.     my @nombres = '';
  26.     open( LIST2, "lista2.txt" );
  27.     @lista2 = <LIST2>;
  28.     foreach $nombre_completo (@lista2) {
  29.         ( $uno, $dos, $tres, $cuatro ) = split( '/', $nombre_completo );
  30.         my $nombre = $uno . $dos;
  31.         push( @nombres, $nombre );
  32.     }
  33.     return @nombres;
  34. }
  35.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Por favor, si alguien me pudiera ayudar le estaría profundamente agradecido.
Última edición por explorer el 2012-02-20 22:47 @991, editado 1 vez en total
Razón: Formateado de código con Perltidy
marioalbertocer
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2011-09-22 16:47 @741

Publicidad

Re: Abrir y copiar archivos a partir de listas

Notapor explorer » 2012-02-20 23:03 @002

He visto algunos detalles...
  • Línea 5. Usas la variable @nombres, pero en ninguna parte la has declarado ni inicializado
  • La línea 7 es mejor escribirla cambiando el '@' por el '$', ya que solo quiere sacar un valor del array @nombres_corregidos
  • Sería recomendable poner close() a los ficheros abiertos en las líneas 11 y 12
  • La subrutina de la línea 24 recibe un array como argumento, como vemos en la línea 5, pero no lo recoges en ninguna parte
  • El open() de la línea 26 necesitaría un close(), por si acaso
  • Si existiese más de un $nombre_corregido que coincidiese con $nom, el fichero anterior archivos2/$nom será sobreescrito
  • No compruebas si los open() han funcionado, por lo que no estás seguro de si realmente puedes leer y escribir en los ficheros

Es recomendable el uso de 'use strict;', 'use warnings;' y 'use autodie;' para que Perl pueda ayudarte a encontrar estos errores.
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


Volver a Básico

¿Quién está conectado?

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

cron