• Publicidad

Cambiar nombre de archivo

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

Cambiar nombre de archivo

Notapor enric73 » 2017-05-15 14:29 @645

Buenas.

Dispongo de un archivo con nombre wrfpost_d01_2017-05-15_00:00:00.grb y necesito dejarlo como wrfpost_d01_2017-05-15_00.grb, es decir, eliminar :00:00.

¿Cómo puedo hacerlo? chop y substract no me sirven; si fueran los primeros o últimos caracteres, sí.
enric73
Perlero nuevo
Perlero nuevo
 
Mensajes: 154
Registrado: 2012-03-16 06:27 @311

Publicidad

Re: Cambiar nombre de archivo

Notapor explorer » 2017-05-15 15:51 @702

Se me ocurren dos formas.

La primera es usando una expresión regular:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $nombre_archivo = 'wrfpost_d01_2017-05-15_00:00:00.grb';
  2. $nombre_archivo =~ s/:00:00//;                          # buscar el patrón, y quitarlo
  3. say $nombre_archivo;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Esto se puede hacer así porque solo existe un lugar dentro del nombre del archivo que coincide con el patrón ':00:00'.

Otra forma es "quitando" los caracteres de una determinada posición:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $nombre_archivo = 'wrfpost_d01_2017-05-15_00:00:00.grb';
  2. substr($nombre_archivo, -10, 6) = "";                   # Los 6 caracteres que hay a partir de la posición -10, los sustituimos por ""
  3. say $nombre_archivo;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
(y... como puedes ver, sí que se podía usar substr() ;) )
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Cambiar nombre de archivo

Notapor enric73 » 2017-05-31 11:17 @511

Muchas gracias, explorer.

¿Cómo lo hacías para que el cambio de nombre también quede modificado realmente? La modificación aparece en pantalla pero en el directorio, el fichero mantiene el mismo nombre.

¿Lo harías así?
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. (my $newName = $grib) =~ s/:00:00//;
  2. rename $grib, $newName;
  3. (my $newName2 = $grib) =~ s/:00:00.grb//;
  4. rename $grib, $newName2;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Realmente necesito renombrarlo de dos maneras.

En el caso de utilizar sustr($nombre_archivo, -10, 6) = ""; ¿Sería así?
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. (my $newName = $grib) =~ sustr($grib, -10, 6) = "";
  2. rename $grib, $newName;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Gracias.
enric73
Perlero nuevo
Perlero nuevo
 
Mensajes: 154
Registrado: 2012-03-16 06:27 @311

Re: Cambiar nombre de archivo

Notapor explorer » 2017-06-02 15:50 @701

enric73 escribiste:¿Cómo lo hacías para que el cambio de nombre también quede modificado realmente? La modificación aparece en pantalla pero en el directorio, el fichero mantiene el mismo nombre.

Bueno, guardaría el nombre original en la variable $original, modificaría el nombre en $nuevo, y finalmente hago un rename

enric73 escribiste:¿Lo harías así?
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. (my $newName = $grib) =~ s/:00:00//;
  2. rename $grib, $newName;
  3. (my $newName2 = $grib) =~ s/:00:00.grb//;
  4. rename $grib, $newName2;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
No puedes renombrar el mismo archivo dos veces. El segundo rename() sacará un mensaje de error diciendo que el archivo $grib ya no existe (fue renombrado un par de líneas antes).

enric73 escribiste:Realmente necesito renombrarlo de dos maneras.

En el caso de utilizar sustr($nombre_archivo, -10, 6) = ""; ¿Sería así?
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. (my $newName = $grib) =~ substr($grib, -10, 6) = "";
  2. rename $grib, $newName;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
No sé qué significa eso de renombrarlo dos veces. ¿Quieres decir que hay que hacer dos modificaciones en el nombre del archivo antes de hacer el cambio de nombre del archivo en el disco?

Quizás con un ejemplo completo lo tendríamos más claro. Solicitaste una eliminación de unos caracteres, y eso es lo que hace el substr(). Ahora bien, aquí hay que saber jugar al ajedrez. Si necesitas el nombre original para poder hacer un rename(), guárdalo antes en otra variable. Sabiendo que el proceso substr() es destructivo, mantén una copia, y así luego ya puedes hacer el rename() con los nombres anterior y nuevo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
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 2 invitados