• Publicidad

Buscar y copiar

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

Buscar y copiar

Notapor joss » 2007-09-24 13:51 @618

Intento crear un script que busque en un directorio todos los archivos terminados en .jpg y que los mueva a un directorio:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

use strict;
use File::Find;

my $dir = ' C:\img ';

find(\&imprimir_archivo_img, $dir);

sub imprimir_archivo_img{
my $elemento = $_;

if(-f $elemento && $elemento =~ /\.jpg$/)

{

my $img = $elemento ;

my $dest = 'C:\';

move( $img, $dest);

}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Pero al intentar interpretarlo me da:

Código: Seleccionar todo
C:\Documents and Settings\user\Escritorio\Programando\Perl\project>Img.pl
Can't find string terminator "'" anywhere before EOF at C:\Documents and Setting
s\JosS y bEa\Escritorio\Programando\Perl\project\Img.pl line 19.
joss
Perlero nuevo
Perlero nuevo
 
Mensajes: 36
Registrado: 2007-09-10 13:04 @586

Publicidad

Notapor explorer » 2007-09-24 14:40 @652

El error es debido a que hay un backslash junto a una comilla, en la línea 19:
Código: Seleccionar todo
my $dest = 'C:\';
Esta es una de las raras ocasiones en las que los backslash 'molestan' cuando están entrecomillados simples.

Prueba con
Código: Seleccionar todo
my $dest = q{C:\\};
o con
Código: Seleccionar todo
my $dest = 'C:/';


Falta la definición de la función move().

Pon un use File::Copy; al principio.
Última edición por explorer el 2007-09-26 14:03 @627, editado 3 veces en total
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

Notapor joss » 2007-09-26 13:48 @617

Me sigue sin funcionar y no lo entiendo, que lo he comprobado una y otra vez el código pero nada :s .

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

use strict;
use File::Find;
use File::Copy;

my $dir = ' C:\img ';

find(\&imprimir_archivo_img, $dir);

sub imprimir_archivo_img{
my $elemento = $_;

if(-f $elemento && $elemento =~ /\.jpg$/)

{

my $img = $elemento ;

my $dest = "C:\\";

Move ($img, $dest);

}
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
joss
Perlero nuevo
Perlero nuevo
 
Mensajes: 36
Registrado: 2007-09-10 13:04 @586

Notapor explorer » 2007-09-26 14:02 @626

Yo quitaría los espacios en blanco que hay en la variable $dir.

Luego, en la función imprimir_archivo_img(), en lugar de move pondría un print sacando el valor de las variables, para saber qué es lo que ha encontrado:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print "Origen: $img. Destino: $dest.\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Al menos tendré pistas de qué es lo que está pasando.
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

Notapor explorer » 2007-09-26 14:21 @640

¿Si haces un perl -c, sale algún error?
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

Notapor creating021 » 2007-09-26 16:02 @710

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

use strict;
use File::Find;
use File::Copy;

my $dir = 'C:\\img'; #El mismo problema
if(-d $dir){ #Nos aseguramos...
  find(\&imprimir_archivo_img, $dir);
  sub imprimir_archivo_img{
    my $elemento = $_;
    if(-f $elemento && $elemento =~ /\.jpg$/)  {
      my $img = $elemento ;
      my $dest = "C:\\";
      Move ($img, $dest);
    }
  }
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

:roll:
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor explorer » 2007-09-26 18:42 @821

Pues no... no es necesario escapar el backslash de 'C:\img'.

Que yo sepa (lo pone en perldata), solo es necesario escapar a la comilla y al propio backslash.

Es decir... en nuestro programa... sí que hay que escaparlo (por ser un backslash), pero no es necesario porque después del backslash viene una letra 'i'. Ahí no debería estar el error.

¿'Move' con letra mayúscula?
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

Notapor creating021 » 2007-09-26 20:39 @902

Hmmm... mañana veré perldoc perldata.

Resulta en script lo puse así (sín escapar) pero me dice:
Can't find string terminator "'" anywhare before EOF at script.pl line 2


Es raro, ya que '\n' (e imprime literalmente \n ) no pone problema y $, @, % son tomados como texto.

diagnostics.pm no me ha dicho mucho.
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor joss » 2007-09-27 13:37 @609

Ya esta. El problema eran los espacios en la variable $dir.

Esto quiere decir que por muy tonto que sea el error, te estropea el script.

Gracias nuevamente.
joss
Perlero nuevo
Perlero nuevo
 
Mensajes: 36
Registrado: 2007-09-10 13:04 @586


Volver a Básico

¿Quién está conectado?

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