Página 1 de 1
Script en Perl que lee el nombre de un archivo
Publicado:
2012-08-09 10:45 @489
por rsanchez8409
Hola,
Soy nuevo en Perl, y estoy tratando de crear un script .pl que haga lo siguiente:
Tengo un archivo pdf con la siguiente estructura en el nombre del archivo:
AAA_BBB_CCC_DDD_EEE.pdf
Necesito que el script genere otro archivo con otra extensión, por ejemplo txt, y que dentro muestre el nombre del archivo como si fueran parámetros, así:
@@TEXT01: AAA
@@TEXTO2: BBB
@@TEXTO3: CCC
@@TEXTO4: DDD
@@TEXTO5: EEE
y que ese nuevo archivo se llame AAA_BBB_CCC_DDD_EEE.txt
Alguien me puede ayudar para ver cómo puedo empezar, porque no sé cómo hacer...
Gracias
Re: Script en Perl que lee el nombre de un archivo
Publicado:
2012-08-09 12:01 @542
por explorer
Bienvenido a los foros de Perl en Español, rsanchez8409.
Es un problema sencillo... debes usar split() para separar los campos, y luego podrías usar una expresión regular para quitar la extensión del primer archivo y luego concatenar la segunda extensión. Abrir el archivo, escribir todos los campos con ese formato, cerrar, y salir.
¿Tienes hecho algo?
Re: Script en Perl que lee el nombre de un archivo
Publicado:
2012-08-09 12:45 @573
por rsanchez8409
Hola, explorer.
Hasta ahora estoy comenzando con Perl, entonces ya había visto el split() y había hecho algo como esto:
'{split("_"); print "@@TEXTO1:"a[1] "\n@@TEXTO2:" a[2] "\n@@TEXTO3:" a[3] "\n@@TEXTO4:" a[0] "\n@@TEXTO5:" a[5] "}'
Pero no tengo claro cómo crear el resto del código como usted me dice... Si me pudiera mostrar un poco cómo le agradecería mucho.
Re: Script en Perl que lee el nombre de un archivo
Publicado:
2012-08-09 12:46 @573
por MARKO
Bienvenido man, te pongo una solución a tu problema con un extra que es el manejo gráfico gracias a Tkx.
en la función "analizar_click" está lo que te interesa.
Using perl Syntax Highlighting
#!/usr/bin/perl -w
use strict;
use Tkx;
system ("cls");
#########
my $archivo;
#########
#####lementos que componen la ventana y manejo geometrico de la misma.
my $forma = Tkx::widget->new(".");
$forma->g_wm_title("Archivos PDF");
$forma->new_ttk__label(-text => "Archivo")->g_grid(-column => 2, -row => 1);
$forma->new_ttk__button(-text=>"Buscar",
-command => sub{buscar_click()})->g_grid(-column=> 1, -row=> 2);
$forma->new_ttk__entry(-width => 65,-textvariable =>\$archivo)-> g_grid(-column=>2, -row =>2);
$forma->new_ttk__button(-text => "Analizar",
-command => sub{analizar_click()})->g_grid(-column=>1, -row =>3);
$forma->new_ttk__button(-text => "Salir",
-command => sub{$forma->g_destroy()})->g_grid(-column=>3, -row=>3);
Tkx::MainLoop;
#####################################################################################
sub buscar_click{
$archivo = Tkx::tk___getOpenFile(-filetypes=>[['Archivos Pdf', '*.pdf']], #dirección del archivo.
-initialdir=>'C:\\');
}
sub analizar_click #####################################esto es lo que interesa del problema
{
my @vector = split ('/',$archivo);
$vector[-1]=~ s/.pdf//;
@vector=split ('_',$vector[-1]);
$archivo =~ s/.pdf/.txt/;
open (ARCHIVO,">>".$archivo);
my $contador = 1;
foreach(@vector){
print ARCHIVO "\@\@TEXTO".$contador.":".$_."\n";
$contador++;
}
close (ARCHIVO);
}
Coloreado en 0.005 segundos, usando
GeSHi 1.0.8.4
espero que te sirva
saludos.
Re: Script en Perl que lee el nombre de un archivo
Publicado:
2012-08-09 15:22 @682
por rsanchez8409
Gracias, MARKO, perdón la preguntadera y la inexperiencia... pero quiero entender bien la estructura...
Voy a probar primero con este código tal cual se ve abajo, sin la parte gráfica...
Using perl Syntax Highlighting
#!/usr/bin/perl -w
use strict;
system ("cls");
#########
my $archivo;
#########
sub analizar_click #####################################esto es lo que interesa del problema
{
my @vector = split ('/',$archivo);
$vector[-1]=~ s/.pdf//;
@vector=split ('_',$vector[-1]);
$archivo =~ s/.pdf/.txt/;
open (ARCHIVO,">>".$archivo);
my $contador = 1;
foreach(@vector){
print ARCHIVO "\@\@TEXTO".$contador.":".$_."\n";
$contador++;
}
close (ARCHIVO);
}
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Pero no sé si está para Windows o para Linux... Lo probé en mi RedHat con
./pdf_hdr.pl, pero mostró que no reconoce (cls)...
Re: Script en Perl que lee el nombre de un archivo
Publicado:
2012-08-09 15:47 @699
por explorer
En efecto, el comando cls suelo existir solamente en Windows.
Teniendo en cuenta que su única misión es limpiar la pantalla de la emulación de la línea de comandos, puedes sustituirlo por clear, que hace esa función en los Linux modernos, limpiando el contenido de las terminales de línea de comandos.
O, más sencillo, quitar esa línea.
Re: Script en Perl que lee el nombre de un archivo
Publicado:
2012-08-09 16:12 @716
por MARKO
Bien, bien.
En Windows la línea
system (cls) sirve para limpiar la pantalla, puedes quitarla y probar así.
Using perl Syntax Highlighting
use strict;
#########
my $archivo; #dirección del archivos pdf "C:/directorio/directorio2/directorioX/nombredearchivo.pdf"
#########
my @vector = split ('/',$archivo); # quitas las diagonales y los directorios van a @vector.
$vector[-1]=~ s/.pdf//; # le quita el .pdf al nombre del archivo que está en la ultima posición.
@vector=split ('_',$vector[-1]); # @vector se convierte en el nombre del archivo sin "_"
$archivo =~ s/.pdf/.txt/; #al nombre del archivo le quita el .pdf y le pone .txt
open (ARCHIVO,">>".$archivo); #creas un archivo (.txt) con el nombre deseado
my $contador = 1;
foreach(@vector){
print ARCHIVO "\@\@TEXTO".$contador.":".$_."\n"; #$_ tiene el contenido de cada posición de @vector en cada iteración
$contador++;
}
close (ARCHIVO); #Cierra el archivo.
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
perdón la preguntadera y la inexperiencia... pero quiero entender bien la estructura...
para eso está el foro,
man, no te preocupes
Éxitos.
Re: Script en Perl que lee el nombre de un archivo
Publicado:
2012-08-10 03:21 @181
por explorer
Esta es mi versión:
Using perl Syntax Highlighting
#!/usr/bin/env perl
use v5.10;
use autodie;
my $archivo = 'AAA_BBB_CCC_DDD_EEE.pdf';
my($nombre, undef) = split /[.]/, $archivo;
my @campos = split /[_]/, $nombre;
my $prefijo = 'TEXTO1';
open my $SALIDA, q[>], "$nombre.txt";
for my $campo (@campos) {
say $SALIDA "\@\@$prefijo: $campo";
$prefijo++; # ¡Magia!
}
close $SALIDA;
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Re: Script en Perl que lee el nombre de un archivo
Publicado:
2012-08-14 10:38 @484
por rsanchez8409
Vale, señores, entendí las dos soluciones propuestas.
¡Gracias por la ayuda!