Página 2 de 2

Re: Eliminar palabras en distintas posiciones de un archivo

NotaPublicado: 2014-04-10 10:57 @498
por pablgonz
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

Re: Eliminar palabras en distintas posiciones de un archivo

NotaPublicado: 2014-04-10 15:07 @671
por explorer
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 ...

Re: Eliminar palabras en distintas posiciones de un archivo

NotaPublicado: 2014-04-10 17:34 @773
por pablgonz
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

Re: Eliminar palabras en distintas posiciones de un archivo

NotaPublicado: 2014-04-28 06:55 @330
por pablgonz
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.001 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.002 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.

Re: Eliminar palabras en distintas posiciones de un archivo

NotaPublicado: 2014-04-28 19:45 @864
por explorer
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.

Re: Eliminar palabras en distintas posiciones de un archivo

NotaPublicado: 2014-04-29 06:57 @331
por pablgonz
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.

Re: Eliminar palabras en distintas posiciones de un archivo

NotaPublicado: 2014-04-29 14:45 @656
por explorer
Bueno, con que aparezca una sola vez, vale, ¿no?

Re: Eliminar palabras en distintas posiciones de un archivo

NotaPublicado: 2014-04-30 17:06 @754
por pablgonz
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.

Re: Eliminar palabras en distintas posiciones de un archivo

NotaPublicado: 2014-04-30 17:55 @788
por explorer
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).