• Publicidad

Eliminar palabras en distintas posiciones 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.

Re: Eliminar palabras en distintas posiciones de un archivo

Notapor pablgonz » 2014-04-10 10:57 @498

Hola de nuevo, estoy intentando hacer unas modificaciones para que elimine la siguiente lista de palabras:
Sintáxis: [ Descargar ] [ Ocultar ]
  1. pst-graphicx 
  2. pst-barcode 
  3. pst-tvz 
  4. pst-bspline 
  5. pst-math 
  6. pst-solides3d 
  7. pst-circ 
  8. pst-am 
  9. pst-optic 
  10. pst-sigsys 
  11. pst-magneticfield 
  12. pst-fun 
  13. pst-node 
  14. pst-gantt 
  15. pst-jtree 
  16. pst-asr 
  17. pst-3dplot 
  18. pst-fractal 
  19. pst-coil 
  20. pst-platon 
  21. pst-thick 
  22. pst-mirror 
  23. pst-knot 
  24. pst-optexp 
  25. pst-support 
  26. pst-bezier 
  27. pst-calendar 
pero, que no elimine la palabra pst-exa, pensé en añadir pst-\w en $PALABRAS, claro que, al usar pst-\w también cazará pst-exa la cual no deseo que elimine. Y aquí va la consulta, ¿cómo defino una expresión regular en $PALABRAS para que elimine lo que deseo, pero, añada esta excepción?

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

Publicidad

Re: Eliminar palabras en distintas posiciones de un archivo

Notapor explorer » 2014-04-10 15:07 @671

Pon todas las palabras como alternativas (separadas por '|') en el patrón de $PALABRAS:

my $PALABRAS = qr/\b (?: pst-algo\d+ | pstricks (?: -add )? | psfrag | auto-pst-pdf | graphicx | pst-graphicx | pst-barcode | pst-tvz ...
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: Eliminar palabras en distintas posiciones de un archivo

Notapor pablgonz » 2014-04-10 17:34 @773

Ok, así lo tengo escrito ahora, mi idea era escribir un poco más abreviado el código para que no quedara una línea tan larga en $PALABRAS (se ve un poco feo escribir una línea tan larga).
Gracias,
Pablo
pablgonz
Perlero nuevo
Perlero nuevo
 
Mensajes: 236
Registrado: 2010-09-08 21:03 @919
Ubicación: Concepción (Chile)

Re: Eliminar palabras en distintas posiciones de un archivo

Notapor pablgonz » 2014-04-28 06:55 @330

Me asalta una nueva duda, pero, es relacionada con el mismo archivo. Supongamos que antes de hacer todos los cambios deseo buscar una línea en $cabeza y guardarla, en my $example, para hacer uso de ella mediante un if/else más adelante, en específico, busco las líneas:
Sintáxis: [ Descargar ] [ Ocultar ]
Using latex Syntax Highlighting
  1. \usepackage{pst-exa}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
o
Sintáxis: [ Descargar ] [ Ocultar ]
Using latex Syntax Highlighting
  1. \usepackage[tcb]{pst-exa}
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
para luego hacer algo como esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if(my $example=\usepackage{pst-exa}){
  2. $cabeza .= <<'EXTRA';
  3. \usepackage{pst-exa}
  4. EXTRA}
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
y si se da el otro caso hacer:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if(my $example=\usepackage[tcb]{pst-exa}){
  2. $cabeza .= <<'EXTRA';
  3. \usepackage[pdf,tcb]{pst-exa}
  4. EXTRA
  5. y una expresión regular a $cuerpo}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Claro, la idea sería hacerlo sin tener que hacer grandes modificaciones al script, si es que es posible.

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

Re: Eliminar palabras en distintas posiciones de un archivo

Notapor explorer » 2014-04-28 19:45 @864

Si buscas un texto en concreto, puedes usar la función index(). Si encuentras lo que buscas, pones una variable bandera a '1' (por ejemplo), y luego, con un if(), distingues los casos.
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: Eliminar palabras en distintas posiciones de un archivo

Notapor pablgonz » 2014-04-29 06:57 @331

Ya veo, pero, creo que no me funcionará. Como las palabra que busco son \usepackage{pst-exa} o \usepackage[tcb]{pst-exa} y \usepackage aparece varias veces en $cabeza (no sé cuántas), no podré fijar el valor en 1 usando index() para analizar los casos (pienso). Le daré un par de vueltas a ver si lo logro.

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

Re: Eliminar palabras en distintas posiciones de un archivo

Notapor explorer » 2014-04-29 14:45 @656

Bueno, con que aparezca una sola vez, vale, ¿no?
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: Eliminar palabras en distintas posiciones de un archivo

Notapor pablgonz » 2014-04-30 17:06 @754

Bueno, creo que comprendí la idea (más o menos). Agregué el siguiente código justo después de dividir el archivo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $pstTcbload = 0;     # Buscamos si está cargado \usepackage[tcb]{pst-exa}
  2. $pstTcbload = index($cabeza,"usepackage[tcb]{pst-exa}");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

y este código antes de grabar los cambios:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if ($pstTcbload > 1) {
  2. print "Se encontró [tcb] en el paquete pst-exa\n";
  3. ### Cambiamos swpl a tcb usando una expresión regular
  4. $cuerpo =~ s/(graphic=\{)\[(scale=\d*)\]($imageDir\/$name-exa-\d*)\}/$1$2\}\{$3\}/gmsx;
  5. ### Se añade la opción [pdf] al paquete pst-exa
  6. $cabeza .= <<"EXTRA";
  7. \\usepackage[tcb,pdf]{pst-exa}
  8. EXTRA
  9. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Claro, no he podido analizar todos los casos, pero, es un inicio.
pablgonz
Perlero nuevo
Perlero nuevo
 
Mensajes: 236
Registrado: 2010-09-08 21:03 @919
Ubicación: Concepción (Chile)

Re: Eliminar palabras en distintas posiciones de un archivo

Notapor explorer » 2014-04-30 17:55 @788

index() devuelve -1 en caso de que no encuentre la subcadena.

Si la encuentra, devolverá un valor que será la posición en la que encuentra la subcadena en la cadena. Así que será un valor entre 0 y la longitud de la cadena menos la subcadena (entonces... '0' es también un valor válido que indica que se encontró la subcadena).

Repasa el if(), porque no tienes en cuenta el caso de que la subcadena esté en la primera posición de $cabeza (sí, es raro, pero podría pasar).
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

Anterior

Volver a Básico

¿Quién está conectado?

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