• Publicidad

Eliminar determinada línea en blanco de varios archivos

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

Eliminar determinada línea en blanco de varios archivos

Notapor pablgonz » 2014-01-27 05:11 @258

Hola a todos, tengo el siguiente problema, y la verdad no sé si es posible resolverlo, tengo varios archivos dentro de un directorio del siguiente tipo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using latex Syntax Highlighting
  1. \documentclass{article}
  2. \usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry}
  3. \usepackage{lmodern,pstricks}
  4. \usepackage{pstricks-add}
  5. \usepackage{pstexample}
  6. \begin{document}
  7. \begin{postscript}
  8. \psset{unit=0.5cm,runit=0.5cm}
  9. \begin{pspicture}[showgrid=true](0,3)(10,10)
  10. \psdot(2,4)\pscircle(7,7){2}
  11. % Sigue una línea en blanco que no deseo borrar
  12.  
  13. \psCircleTangents(2,4)(7,7){2}
  14. \pcline[nodesep=-1cm,linecolor=blue](2,4)(CircleT1)
  15. \pcline[nodesep=-1cm,linecolor=blue](2,4)(CircleT2)
  16. \psdots(CircleT1)(CircleT2)
  17. % Sigue una línea en blanco que no deseo borrar
  18.  
  19. \uput[-80](CircleT1){T1}\uput[115](CircleT2){T2}
  20. \end{pspicture}
  21. \end{postscript}
  22. \end{document}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
y deseo dejarlos de la siguiente forma:
Sintáxis: [ Descargar ] [ Ocultar ]
Using latex Syntax Highlighting
  1. \documentclass{article}
  2. \usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry}
  3. \usepackage{lmodern,pstricks}
  4. \usepackage{pstricks-add}
  5. \usepackage{pstexample}
  6. \begin{document}
  7. \psset{unit=0.5cm,runit=0.5cm}
  8. \begin{pspicture}[showgrid=true](0,3)(10,10)
  9. \psdot(2,4)\pscircle(7,7){2}
  10. % Sigue una línea en blanco que no deseo borrar
  11.  
  12. \psCircleTangents(2,4)(7,7){2}
  13. \pcline[nodesep=-1cm,linecolor=blue](2,4)(CircleT1)
  14. \pcline[nodesep=-1cm,linecolor=blue](2,4)(CircleT2)
  15. \psdots(CircleT1)(CircleT2)
  16. % Sigue una línea en blanco que no deseo borrar
  17.  
  18. \uput[-80](CircleT1){T1}\uput[115](CircleT2){T2}
  19. \end{pspicture}
  20. \end{document}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
es decir, deseo eliminar (completamente) las líneas
Sintáxis: [ Descargar ] [ Ocultar ]
  1. \begin{postscript} 
y
Sintáxis: [ Descargar ] [ Ocultar ]
  1. \end{postscript} 
que siempre van después de
Sintáxis: [ Descargar ] [ Ocultar ]
  1. \begin{document} 
y antes de
Sintáxis: [ Descargar ] [ Ocultar ]
  1. \end{document} 
pero, sin eliminar las líneas en blanco que están en medio del texto, con el siguiente trozo de script (es parte de otro), logro eliminarlas, pero, me deja la línea en blanco:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. for my $archivo (<imageDir/*.tex>) {
  2.     open F, "<$archivo";             # abrimos
  3.     my @lineas = <F>;                # leemos
  4.     close F;
  5.  
  6.     open W, ">$archivo";             # abrimos
  7.     foreach my $linea (@lineas) {    # recorremos
  8.         $linea =~ s/\\(begin|end)\{postscript\}//g;   # eliminamos la línea que queremos
  9.         print W $linea;              # guardamos
  10.             }
  11.    close W;
  12. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
he intentado con
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $linea =~ s/\n+/\n/g;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
pero, esto elimina todas las líneas en blanco. Revisé los hilos del foro referido a este tema y busqué por Google un buen rato, y no he dado con la solución, ¿se pueden eliminar solo estas líneas en blanco? o usar una expresión regular para ello.

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

Publicidad

Re: Eliminar determinada línea en blanco de varios archivos

Notapor pablgonz » 2014-01-27 12:08 @547

Después de revisar la descripción que escribí de mi problema, me percate de la solución, estaba frente a mis ojos y no la vi, solo necesito modificar la expresión regular, quedo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.      $linea =~ s/(?<uno>\\begin\{document\})\s+(?<dos>\\begin\{postscript\})/$+{uno}/gemxs;
  2.      $linea =~ s/(?<uno>\\end\{postscript\})\s+(?<dos>\\end\{document\})/$+{dos}/gemxs;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

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

Re: Eliminar determinada línea en blanco de varios archivos

Notapor explorer » 2014-01-27 12:17 @553

Una solución, con una expresión regular:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.16;
  3. use autodie;                    # «Es mejor morir que regresar con deshonor» --proverbio Klingon
  4.  
  5. ## Solución 1: cambio en memoria, con expresión regular
  6. my $archivo;
  7. {
  8.     open my $ARCHIVO, 'code_36637.txt';         # Abrimos el archivo
  9.     local $/;                                   # modo aspiradora
  10.     $archivo = <$ARCHIVO>;
  11.     close $ARCHIVO;
  12. }
  13.  
  14. ## Eliminación de lo sobrante
  15. $archivo =~ s/
  16.             (?|
  17.                 ( \\begin\{document\} \s+ )     # lo que debe anteceder
  18.                 \\begin\{postscript\} \s+       # esto es lo que queremos quitar
  19.             |
  20.                 \\end\{postscript\} \s+         # esto es lo que queremos quitar
  21.                 ( \\end\{document\} \s* )       # lo que debe seguir
  22.             )
  23.             /$1/gmsx;
  24.  
  25. ## Grabamos el resultado
  26. open my $ARCHIVO, ">code_36637.txt";
  27. print   $ARCHIVO $archivo;
  28. close   $ARCHIVO;
  29.  
  30. __END__
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Se puede hacer de muchas otras formas. ¿Alguien más se anima?
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


Volver a Básico

¿Quién está conectado?

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