• Publicidad

Script en Perl que lee el nombre de un archivo

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

Script en Perl que lee el nombre de un archivo

Notapor rsanchez8409 » 2012-08-09 10:45 @489

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
rsanchez8409
Perlero Nuevo
Perlero Nuevo
 
Mensajes: 4
Registrado: 2012-08-09 10:32 @480

Publicidad

Re: Script en Perl que lee el nombre de un archivo

Notapor explorer » 2012-08-09 12:01 @542

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?
JF^D Perl Programming Language
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 12768
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Script en Perl que lee el nombre de un archivo

Notapor rsanchez8409 » 2012-08-09 12:45 @573

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.
rsanchez8409
Perlero Nuevo
Perlero Nuevo
 
Mensajes: 4
Registrado: 2012-08-09 10:32 @480

Re: Script en Perl que lee el nombre de un archivo

Notapor MARKO » 2012-08-09 12:46 @573

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.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use Tkx;
  4.  
  5. system ("cls");
  6. #########
  7. my $archivo;
  8. #########
  9.  
  10. #####lementos que componen la ventana y manejo geometrico de la misma.
  11.  
  12. my $forma = Tkx::widget->new(".");
  13.  
  14. $forma->g_wm_title("Archivos PDF");
  15.  
  16. $forma->new_ttk__label(-text => "Archivo")->g_grid(-column => 2, -row => 1);
  17.  
  18. $forma->new_ttk__button(-text=>"Buscar",
  19.                 -command => sub{buscar_click()})->g_grid(-column=> 1, -row=> 2);
  20.  
  21. $forma->new_ttk__entry(-width => 65,-textvariable =>\$archivo)-> g_grid(-column=>2, -row =>2);
  22.  
  23. $forma->new_ttk__button(-text => "Analizar",
  24.                 -command => sub{analizar_click()})->g_grid(-column=>1, -row =>3);
  25.                
  26. $forma->new_ttk__button(-text => "Salir",
  27.                 -command => sub{$forma->g_destroy()})->g_grid(-column=>3, -row=>3);
  28.  
  29. Tkx::MainLoop;
  30. #####################################################################################
  31.  
  32. sub buscar_click{
  33.         $archivo = Tkx::tk___getOpenFile(-filetypes=>[['Archivos Pdf', '*.pdf']],     #dirección del archivo.
  34.         -initialdir=>'C:\\');
  35. }
  36.  
  37. sub analizar_click #####################################esto es lo que interesa del problema
  38. {
  39.         my @vector = split ('/',$archivo);
  40.         $vector[-1]=~ s/.pdf//;
  41.         @vector=split ('_',$vector[-1]);
  42.        
  43.         $archivo =~ s/.pdf/.txt/;
  44.         open (ARCHIVO,">>".$archivo);
  45.         my $contador = 1;
  46.         foreach(@vector){
  47.                 print ARCHIVO "\@\@TEXTO".$contador.":".$_."\n";
  48.                 $contador++;
  49.         }
  50.         close (ARCHIVO);
  51. }      
  52.  
Coloreado en 0.012 segundos, usando GeSHi 1.0.8.4


espero que te sirva

saludos.
MARKO
Perlero Nuevo
Perlero Nuevo
 
Mensajes: 61
Registrado: 2012-01-10 22:34 @982

Re: Script en Perl que lee el nombre de un archivo

Notapor rsanchez8409 » 2012-08-09 15:22 @682

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

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. use strict;
  3.  
  4. system ("cls");
  5. #########
  6. my $archivo;
  7. #########
  8.  
  9.  
  10. sub analizar_click #####################################esto es lo que interesa del problema
  11. {
  12.         my @vector = split ('/',$archivo);
  13.         $vector[-1]=~ s/.pdf//;
  14.         @vector=split ('_',$vector[-1]);
  15.        
  16.         $archivo =~ s/.pdf/.txt/;
  17.         open (ARCHIVO,">>".$archivo);
  18.         my $contador = 1;
  19.         foreach(@vector){
  20.                 print ARCHIVO "\@\@TEXTO".$contador.":".$_."\n";
  21.                 $contador++;
  22.         }
  23.         close (ARCHIVO);
  24. }
Coloreado en 0.008 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)...
rsanchez8409
Perlero Nuevo
Perlero Nuevo
 
Mensajes: 4
Registrado: 2012-08-09 10:32 @480

Re: Script en Perl que lee el nombre de un archivo

Notapor explorer » 2012-08-09 15:47 @699

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.
JF^D Perl Programming Language
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 12768
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Script en Perl que lee el nombre de un archivo

Notapor MARKO » 2012-08-09 16:12 @716

Bien, bien.

En Windows la línea system (cls) sirve para limpiar la pantalla, puedes quitarla y probar así.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use strict;
  2. #########
  3. my $archivo;         #dirección del archivos pdf    "C:/directorio/directorio2/directorioX/nombredearchivo.pdf"
  4. #########
  5.         my @vector = split ('/',$archivo); # quitas las diagonales y los directorios van a @vector.
  6.         $vector[-1]=~ s/.pdf//;            # le quita el .pdf al nombre del archivo que está en la ultima posición.
  7.         @vector=split ('_',$vector[-1]);   # @vector se convierte en el nombre del archivo sin "_"
  8.        
  9.         $archivo =~ s/.pdf/.txt/;          #al nombre del archivo le quita el .pdf y le pone .txt
  10.         open (ARCHIVO,">>".$archivo);      #creas un archivo (.txt) con el nombre deseado
  11.         my $contador = 1;
  12.         foreach(@vector){
  13.                 print ARCHIVO "\@\@TEXTO".$contador.":".$_."\n"; #$_ tiene el contenido de cada posición de @vector en cada iteración
  14.                 $contador++;
  15.         }
  16.         close (ARCHIVO);  #Cierra el archivo.
  17.  
Coloreado en 0.008 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.
MARKO
Perlero Nuevo
Perlero Nuevo
 
Mensajes: 61
Registrado: 2012-01-10 22:34 @982

Re: Script en Perl que lee el nombre de un archivo

Notapor explorer » 2012-08-10 03:21 @181

Esta es mi versión:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use v5.10;
  3. use autodie;
  4.  
  5. my $archivo = 'AAA_BBB_CCC_DDD_EEE.pdf';
  6.  
  7. my($nombre, undef) = split /[.]/, $archivo;
  8. my @campos         = split /[_]/, $nombre;
  9.  
  10. my $prefijo = 'TEXTO1';
  11.  
  12. open my $SALIDA, q[>], "$nombre.txt";
  13.  
  14. for my $campo (@campos) {
  15.     say $SALIDA "\@\@$prefijo: $campo";
  16.     $prefijo++;                           # ¡Magia!
  17. }
  18.  
  19. close $SALIDA;
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4
JF^D Perl Programming Language
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 12768
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Script en Perl que lee el nombre de un archivo

Notapor rsanchez8409 » 2012-08-14 10:38 @484

Vale, señores, entendí las dos soluciones propuestas.

¡Gracias por la ayuda!
rsanchez8409
Perlero Nuevo
Perlero Nuevo
 
Mensajes: 4
Registrado: 2012-08-09 10:32 @480


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado