• Publicidad

Ayuda con renombrar y comodin

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

Re: Ayuda con renombrar y comodin (casi logrado)

Notapor explorer » 2011-11-22 07:36 @358

En las expresiones regulares, no debes usar un punto si quieres buscar en ese lugar un punto. Recuerda que un punto, por sí solo, es un comodín para un patrón de expresiones regulares.

Si quieres indicar que en esa posición va un punto -literal-, debes escaparlo.

Así que en vez de

/($name-tmp-$var).ppm/

debes escribirlo como

/($name-tmp-$var)\.ppm/

o

/($name-tmp-$var)[.]ppm/

P.D. Sigo pensando que todo esto es innecesario.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Publicidad

Re: Ayuda con renombrar y comodin (casi logrado)

Notapor pablgonz » 2011-11-22 19:06 @838

explorer escribiste: ...en vez de

/($name-tmp-$var).ppm/
debes escribirlo como
/($name-tmp-$var)\.ppm/
o
/($name-tmp-$var)[.]ppm/
Lo hice, pero sigo con el siguiente error al correr la rutina
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Renombrando test3-tmp-000001.ppm a test3-tmp-1.ppm: 1 : Inappropriate I/O control operation
Renombrando test3-tmp-000002.ppm a test3-tmp-2.ppm: 1 : Inappropriate I/O control operation
Renombrando test3-tmp-000003.ppm a test3-tmp-3.ppm: 1 : Inappropriate I/O control operation
Renombrando test3-tmp-000004.ppm a test3-tmp-4.ppm: 1 : Inappropriate I/O control operation
Renombrando test3-tmp-000005.ppm a test3-tmp-5.ppm: 1 : Inappropriate I/O control operation
Renombrando test3-tmp-1.ppm a test36.ppm: 1 : Inappropriate I/O control operation
Renombrando test3-tmp-2.ppm a test37.ppm: 1 : Inappropriate I/O control operation
Renombrando test3-tmp-3.ppm a test38.ppm: 1 : Inappropriate I/O control operation
Renombrando test3-tmp-4.ppm a test39.ppm: 1 : Inappropriate I/O control operation
Renombrando test3-tmp-5.ppm a test310.ppm: 1 : Inappropriate I/O control operation
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
es decir, no funciona como debería, si corro el script dos veces (en la primera los crea pero igual arroja el error).
explorer escribiste:P.D. Sigo pensando que todo esto es innecesario.
En realidad NO, es exactamente lo que busco, no importa si no puedo llamar a convert(Imagemagick), lo que me interesa es que los nombres de los ficheros .ppm tengan la forma que necesito, así, después solo uso
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. mogrify -format formatoimagen *.ppm
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
desde la línea de comandos y listo, pero, como los ficheros .ppm son creados por pdftoppm y éste agrega los benditos ceros, cuando quiera utilizarlos en el fichero latex, tendré que renombrar todas las imágenes o todos los archivos, quizás no es el mejor camino para renombrar los ficheros (en mi lógica funciona), si existe otra forma... espero y la comenten.

Esperando nuevamente la ayuda del foro, se despide:
Pablo
pablgonz
Perlero nuevo
Perlero nuevo
 
Mensajes: 236
Registrado: 2010-09-08 21:03 @919
Ubicación: Concepción (Chile)

Re: Ayuda con renombrar y comodin (casi logrado)

Notapor explorer » 2011-11-22 19:21 @848

Si rename() devuelve 1, que es un valor verdadero, según la documentación quiere decir que ha realizado la operación. En ese caso, $! no se refiere a esa operación, sino a una anterior que provocó un error. $! cambia cuando acaba de ocurrir un error (como se indica en perlvar).

No tiene sentido que saques continuamente el valor de $! si no ha ocurrido ningún error.

No sé para que usas pdftoppm, ya que tanto convert como mogrify (y el resto de ImageMagick) son capaces de leer ficheros pdf.

No entiendo para qué usas mogrify ahí. Parece que simplemente estás haciendo un cambio de formato de fichero, que es justo lo que hace convert. mogrify se usa más para ajustar tamaño, filtrado, etc.

¿De verdad que el trabajo de renombrar los ficheros no es superior al hecho de meter, de forma automática, el nombre de los ficheros dentro del latex?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Ayuda con renombrar y comodin (casi logrado)

Notapor pablgonz » 2011-11-22 20:34 @898

explorer escribiste:Si rename() devuelve 1, que es un valor verdadero, según la documentación quiere decir que ha realizado la operación. En ese caso, $! no se refiere a esa operación, sino a una anterior que provocó un error. $! cambia cuando acaba de ocurrir un error (como se indica en perlvar).

No tiene sentido que saques continuamente el valor de $! si no ha ocurrido ningún error.
Entiendo, pero, ¿cómo elimino el error?

explorer escribiste: No sé para que usas pdftoppm, ya que tanto convert como mogrify (y el resto de ImageMagick) son capaces de leer ficheros pdf.
De Perl no sé mucho (nada, a decir verdad) pero de LaTeX creo saber un poco. Es verdad convert puede convertir cualquier formato entre uno y otro, pero, en el caso especifico de las imágenes creadas con pstricks u otro paquete de dibujo en Latex no es así, creará el png/jpg/etc... pero no se podrán leer las fuentes (se verán borrosas o no se verán) las líneas tendrán otro ancho, en fin, no tendrá la calidad esperada, por mucho que se juegue con los parámetros de convert (y con algunos programas profesionales también), pdftoppm es el único (libre) capaz de entender las imágenes creadas con TeX, el fichero .ppm se puede convertir con ImageMagick u otro software y la calidad de la imagen obtenida es totalmente superior (por ejemplo para páginas web).

explorer escribiste: No entiendo para qué usas mogrify ahí. Parece que simplemente estás haciendo un cambio de formato de fichero, que es justo lo que hace convert. mogrify se usa más para ajustar tamaño, filtrado, etc.
Sí, es verdad, una de las utilidades de mogrify es ajustar tamaño y filtrado, pero
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. for file in *.ppm ; do convert "$file" "${file/%ppm/png}" ; done
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
es equivalente (en Widows y Linux) a
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. mogrify -format png *.ppm
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
que es otra de las funciones para la cual está diseñado, convertir ficheros por lotes conservando el nombre.

explorer escribiste: ¿De verdad que el trabajo de renombrar los ficheros no es superior al hecho de meter, de forma automática, el nombre de los ficheros dentro del latex?
Sí, habitualmente creo guías de ejercicios (geometría) típicas de las pruebas de acceso a la universidad de mi país, cada una se compone más menos de 70 a 75 problemas (incluido las imágenes), para cambiar entre un formato u otro, basta con cambiar la línea
Sintáxis: [ Descargar ] [ Ocultar ]
Using latex Syntax Highlighting
  1. \PrependGraphicsExtensions*{*.pdf}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
por la extensión que se desee, sin tener que cambiar cada línea en la que se llama a la imagen. Por eso es importante el renombrado de los benditos .ppm.

Revisaré por qué me da el error (creo que solo lo da en Windows). Si tienes otra idea de cómo renombrar los ficheros, se agradece.

EDITO: en Linux el error solo cambia de nombre:
Sintáxis: [ Descargar ] [ Ocultar ]
  1. Renombrando test3-tmp-2.ppm a test31.ppm: 1 : Function not implemented 


Saludos,
Pablo

PD: Si no quedan bien los espacios, es por que no me acostumbro a GNOME3 y las fuentes se ven un poco distorsionadas.
pablgonz
Perlero nuevo
Perlero nuevo
 
Mensajes: 236
Registrado: 2010-09-08 21:03 @919
Ubicación: Concepción (Chile)

Re: Ayuda con renombrar y comodin (casi logrado)

Notapor explorer » 2011-11-23 08:55 @413

pablgonz escribiste:Entiendo, pero, ¿cómo elimino el error?
Pues localizando la línea que lo provocó, solventando el error, y no imprimiendo de forma incondicional el valor de $! (o dicho de otra manera: pintar el valor de $! solo cuando ocurra un error).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Ayuda con renombrar y comodin (casi logrado)

Notapor pablgonz » 2011-11-23 21:02 @918

Sé que la línea que me produce el error es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $fichero = $_;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
y que no está correcta la línea
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. next if $fichero=~/($name-tmp-$var)\.ppm/;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
y por eso se produce el E/S error y renombra todos los .ppm que encuentra, pero, no sé cómo modificar esas líneas para que funcione.

Revisando foros en la red referido a renombrar ficheros en directorios, leí que una buena forma sería contar todos los ficheros .ppm y luego renombrarlos (creo que así resolvería el problema de E/S). Por ahora, parece que tendré que seguir leyendo y probando, esto se escapa de mis conocimientos básicos en Perl.

Agradecido por los comentarios.

Pablo.
pablgonz
Perlero nuevo
Perlero nuevo
 
Mensajes: 236
Registrado: 2010-09-08 21:03 @919
Ubicación: Concepción (Chile)

Re: Ayuda con renombrar y comodin (casi logrado)

Notapor explorer » 2011-11-24 02:50 @159

No creo que unas simples asignaciones provoquen errores de E/S... más bien será alguna línea que tenga que ver con la gestión directa de ficheros (open, close, print, read, rename, chmod, chown, opendir, readdir, closedir, tell, seek, -X, etc).

En cuanto al filtrado de ficheros, esa línea salta a la siguiente vuelta si $fichero coincide con ese patrón, y nada más. Todo depende de los valores de las variables $name y $var. Incluso si $var no contuviera nada, no renombraría un fichero llamado nombre-tmp.ppm, ya que el patrón exige la presencia de un guion más después de 'tmp'.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Ayuda con renombrar y comodin (casi logrado)

Notapor pablgonz » 2011-11-24 05:19 @263

Modifiqué el script a esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $dir_renombra = "$tempDir/$imageDir";
  2. my $fichero = '';
  3. my $resultado = '';
  4. my $var = 1;
  5. if(opendir(DIR,$dir_renombra)){
  6.   foreach (readdir DIR){
  7.         $fichero = $_;
  8.         if ($fichero =~ /([^\d]+)(\d+).ppm/)
  9.         {
  10.              my $var=int($2);
  11.              my $nuevo_nombre ="$1$var.ppm";
  12.              print "Renaming $fichero to $nuevo_nombre\n";
  13.         }
  14.       }
  15.     print "FIN\n";
  16.    }
  17.   else
  18.    {
  19.    print "dont open".$dir_renombra;
  20.    }
  21. closedir DIR;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Pero en pantalla me imprime que está renombrando (sin errores), pero no efectúa el cambio en realidad, los ficheros siguen con los mismos nombres...
pablgonz
Perlero nuevo
Perlero nuevo
 
Mensajes: 236
Registrado: 2010-09-08 21:03 @919
Ubicación: Concepción (Chile)

Re: Ayuda con renombrar y comodin (casi logrado)

Notapor explorer » 2011-11-24 05:34 @273

¿Y dónde está la línea que hace el renombrado? No la veo por ningún lado...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Ayuda con renombrar y comodin

Notapor pablgonz » 2011-11-24 18:59 @832

Tenias razón, estaba mareado con todas las versiones de mis intentos fallidos por lograrlo, quedo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. # Renaming .ppm
  2. if ( $^O eq 'MSWin32' ) {
  3.     my $dir_renombra = "$tempDir/$imageDir";
  4.     my $fichero      = '';
  5.     my $resultado    = '';
  6.     my $var          = 1;
  7.     if ( opendir( DIR, $dir_renombra ) ) {
  8.         foreach ( readdir DIR ) {
  9.             $fichero = $_;
  10.             if ( $fichero =~ /([^\d]+)(\d+).ppm/ ) {
  11.                 my $var          = int($2);
  12.                 my $nuevo_nombre = "$1$var.ppm";
  13.                 $resultado = rename( "$dir_renombra/$fichero", "$dir_renombra/$nuevo_nombre" );
  14.             }
  15.         }
  16.     }
  17.     else {
  18.         print "dont open" . $dir_renombra;
  19.     }
  20.     closedir DIR;
  21. }
  22.  
  23. # end renaming
  24.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Creo que me sobran un par de llaves, pero funciona a la perfección. Lo del error I/O me parece que era por
Sintáxis: [ Descargar ] [ Ocultar ]
  1. substr($fichero,0,-10) 
que es la línea que no uso ahora.

Un par de dudas para cerrar(solo por aprendizaje):
1. ¿Todo if necesita un else (como en matemáticas)? o ¿un if puede ir solo?
2. Si deseo eliminar todos los .ppm (con unlink()), ¿cómo los elimino todos? (aquí si que necesitaría un comodín).

Agradecido por el tiempo y la ayudada brindada, daré el tema por resuelto, ahora no tendré que estar abriendo mi máquina virtual con uno u otro sistema operativo (para no tener que reiniciar) y podré convertir a cualquier formato usando los .ppm.

Saludos y Muchas Gracias,
Pablo.
Última edición por explorer el 2011-11-24 19:21 @848, editado 1 vez en total
Razón: Formateado de código con Perltidy
pablgonz
Perlero nuevo
Perlero nuevo
 
Mensajes: 236
Registrado: 2010-09-08 21:03 @919
Ubicación: Concepción (Chile)

AnteriorSiguiente

Volver a Básico

¿Quién está conectado?

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

cron