• Publicidad

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

Modificar cabecera de un archivo

Notapor enric73 » 2012-09-17 13:02 @585

Hola compañeros,

querría modificar la cabecera de un fichero que empieza con ww_2012091700.dat por WW_alt.dat

La cabecera contiene la fecha del día y entonces cada día se modifica. Había escrito el siguiente script pero no me cambia la fecha por el WW_alt.dat. ¿Algún consejo?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use v5.10;
  3. use DateTime;
  4.  
  5. $date = DateTime->now->ymd("");
  6. print "$date\n";
  7.  
  8. @args = ("perl -pi -e 's/ WW_${date}00.dat/WW_alt.dat/g' WW_altvc.ctl");
  9. escriu("@args");
  10. system(@args) == 0 or die $!;
  11.  
  12. sub escriu {
  13.     my @missatge = @_;
  14.     chomp( my $hora = `date |awk '{print \$4}'` );
  15.     print "----->  $hora @missatge\n";
  16. }
  17.  
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4
Última edición por enric73 el 2012-09-17 13:23 @599, editado 5 veces en total
enric73
Perlero nuevo
Perlero nuevo
 
Mensajes: 154
Registrado: 2012-03-16 06:27 @311

Publicidad

Re: Modificar cabecera de un archivo

Notapor explorer » 2012-09-17 14:37 @650

¿Puedes publicar la cabecera de WW_altvc.ctl para que sepamos exactamente cómo es?

P.D. Muy divertida la mezcla de Perl/llamar a perl/comandos externos/módulos... ¿No es mejor usar sólo Perl?
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: Modificar cabecera de un archivo

Notapor enric73 » 2012-09-17 14:58 @665

Hola explorer,

el fichero por dentro es:

Sintáxis: [ Descargar ] [ Ocultar ]
  1. DSET ^WW_2012091700.dat 
  2. *           
  3. UNDEF -999.9 
  4. *           
  5. XDEF 360 LINEAR    0.0000 1.0000 
  6. *           
  7. YDEF 157 LINEAR   -78.0000 1.0000 
  8. *           
  9. ZDEF 1 LINEAR 1 1 
  10. *           
  11. TDEF 57 LINEAR 00Z17SEP2012 03hr 
  12. *           
  13. VARS 32 


Mi propósito es modificar DSET ^WW_2012091700.dat (hoy) por DSET ^WW_atl.dat cada día del año
enric73
Perlero nuevo
Perlero nuevo
 
Mensajes: 154
Registrado: 2012-03-16 06:27 @311

Re: Modificar cabecera de un archivo

Notapor explorer » 2012-09-17 15:42 @696

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.10;
  3. use autodie;
  4.  
  5. my $archivo = 'WW_altvc.ctl';
  6.  
  7. ## Leemos el archivo
  8. open    my $CTL, $archivo;
  9. my @CTL = <$CTL>;
  10. close      $CTL;
  11.  
  12. ## ¡Chas!
  13. $CTL[0] =~ s/\d+/alt/;  # El primer conjunto de dígitos lo cambiamos por 'alt'
  14.  
  15. ## Guardamos el archivo
  16. open my $CTL_OUT, ">$archivo";
  17. print   $CTL_OUT @CTL;
  18. close   $CTL_OUT;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
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: Modificar cabecera de un archivo

Notapor enric73 » 2012-09-17 18:02 @793

Muchas gracias explorer, me ha funcionado.

Otra consulta: Quiero renombrar el nombre de un fichero, que contiene la fecha en el nombre, pero algo falla. No me cambia el nombre.

Adjunto la parte del código.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.10;
  3. use DateTime;
  4.  
  5. $date = DateTime->now->ymd("");
  6. print "$date\n";
  7. $root = '/home/enric/WW3_roda';
  8. rename("$root/WW_{$date}00.ctl", "$root/WW_alt.ctl");
  9. rename("$root/WW_{$date}00.dat", "$root/WW_alt.dat");
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
enric73
Perlero nuevo
Perlero nuevo
 
Mensajes: 154
Registrado: 2012-03-16 06:27 @311

Re: Modificar cabecera de un archivo

Notapor enric73 » 2012-09-18 05:36 @275

Disculpad por la pregunta, ya está solucionado.

Tenía que concatenar, al final de la siguiente manera.

Si hay alguna más elegante, ¿me lo podrías comentar? Gracias.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.10;
  3. use DateTime;
  4.  
  5. $date = DateTime->now->ymd("");
  6. $date2='00.ctl';
  7. $date4='00.dat';
  8. $date3=$date."".$date2;
  9. $date5=$date."".$date4;
  10. $root = '/home/enric/WW3_roda';
  11.  
  12. rename("$root/WW_$date3", "$root/WW_alt.ctl");
  13. rename("$root/WW_$date5", "$root/WW_alt.dat");
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
enric73
Perlero nuevo
Perlero nuevo
 
Mensajes: 154
Registrado: 2012-03-16 06:27 @311

Re: Modificar cabecera de un archivo

Notapor explorer » 2012-09-18 07:53 @370

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.10;
  3. use autodie;
  4. use DateTime;
  5.  
  6. my $root  = '/home/enric/WW3_roda';
  7. my $date  = DateTime->now->ymd("") . '00';
  8.  
  9. rename("$root/WW_$date.ctl", "$root/WW_alt.ctl");
  10. rename("$root/WW_$date.dat", "$root/WW_alt.dat");
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
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: Modificar cabecera de un archivo

Notapor enric73 » 2012-09-18 14:06 @629

Gracias, explorer. Sí, es más corto y limpio.
enric73
Perlero nuevo
Perlero nuevo
 
Mensajes: 154
Registrado: 2012-03-16 06:27 @311


Volver a Básico

¿Quién está conectado?

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

cron