• Publicidad

Buscar y reemplazar palabras en 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.

Buscar y reemplazar palabras en un archivo

Notapor BigBear » 2010-06-05 15:05 @670

Hola.

Ando queriendo abrir un archivo llamado todo.txt el cual contiene
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
fgf
gf
gf
gf
hola
ff
gf
hola
ffg
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


para después abrir como un array e ir reemplazando cada hola con un ok en el archivo de texto.

¿Alguien me podría ayudar?

P.D.: También alguien me podría decir cómo puedo verificar que un archivo de texto tenga permisos de escritura.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Buscar y reemplazar palabras en un archivo

Notapor explorer » 2010-06-05 15:26 @684

No necesitas ni un programa para realizar esa operación:

perl -p -i -e 's/hola/ok/' fichero.txt

que es lo mismo que este programa:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. open FILE, "<fichero.txt";
  3. @fichero = <FILE>;
  4. close FILE;
  5.  
  6. open FILE, ">fichero.txt";
  7. for (@fichero) {
  8.     s/hola/ok/;
  9.     print FILE $_;
  10. }
  11. close FILE;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Y para saber si un fichero tiene permisos de escritura, con un test de fichero:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
if ( -w 'fichero.txt' ) {
    say 'fichero.txt tiene permisos de escritura';
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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: Buscar y reemplazar palabras en un archivo

Notapor BigBear » 2010-06-06 15:42 @696

Gracias explorer.

Ahora, si yo quiero borrar ese "hola" encontrado en vez de reemplazarlo, ¿cómo haría?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Buscar y reemplazar palabras en un archivo

Notapor explorer » 2010-06-06 15:44 @697

Pues cambias la expresión regular...

s/hola//;
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: Buscar y reemplazar palabras en un archivo

Notapor Tikygaki » 2011-05-15 12:37 @567

Hola, soy nueva en este foro, pero tu problema es muy parecido al mío, solo que yo no sé lo que dice, simplemente quiero borrar el renglón 1, 2, 3, o el que yo le introduzca, ¿cómo le hago?

es decir:

si mi archivo es:

hola
yo
uso
Perl

y quiero borrar el renglón 2, a la hora de abrir el archivo diga

hola
uso
Perl
Tikygaki
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2011-05-15 12:22 @557

Re: Buscar y reemplazar palabras en un archivo

Notapor explorer » 2011-05-15 12:49 @575

Bienvenida a los foros de Perl en español, Tikygaki.

Tu caso, aunque parecido, es distinto. Tu lo que quieres es quitar una línea entera.

En Perl, la variable especial $. contiene el número de registro, así que es fácil eliminar el segundo renglón, cuando estemos en él.

Algo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. my $archivo = 'kk.txt';
  3.  
  4. open my $FH, q[<], $archivo;            # abrimos el archivo
  5.  
  6. while (<$FH>) {                         # leemos el archivo, un renglón cada vez
  7.     if ($. == 2) {                      # si es el segundo renglón,
  8.         next;                           #     pasamos al siguiente (volvemos a while)
  9.     }
  10.     print;                              # para todos los demás, imprimimos el renglón
  11. }
  12.  
  13. close   $FH;
  14.  
  15. __END__
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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: Buscar y reemplazar palabras en un archivo

Notapor Tikygaki » 2011-05-15 13:10 @590

wooo Muchas gracias n.n Llevaba atorada allí mucho tiempo ¡ja,ja!, pero ahora una duda más: si lo que quiero es que se modifique en el mismo archivo, porque allí me está creando otro, lo que pasa es que lo mando llamar desde otro .pl que me imprime lo que tiene ese archivo y allí me selecciona cuál desea borrar, y al volverlo a correr me vuelve a imprimir todo otra vez, espero y me haya explicado.
Tikygaki
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2011-05-15 12:22 @557

Re: Buscar y reemplazar palabras en un archivo

Notapor ileiva » 2011-05-15 13:25 @600

Lo abres en modo lectura y otro nuevo en modo escritura. Luego el nuevo lo renombras con el nombre del archivo antiguo.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. my $archivo = 'kk.txt';
  3. my $archivonuevo = 'kk2.txt';
  4.  
  5. open my $FH, q[<], $archivo;  # modo lectura
  6. open my $NFH, q[>], $archivonuevo; # modo escritura
  7.  
  8. while (<$FH>) {                        
  9.     if ($. == 2) {                    
  10.         next;                          
  11.     }
  12.     print {$NFH} $_;    # se imprime en el nuevo archivo
  13. }
  14.  
  15. close $FH;
  16. close $NFH;
  17.  
  18. rename $archivonuevo, $archivo;
  19.  
  20. __END__
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Saludos.
Avatar de Usuario
ileiva
Perlero nuevo
Perlero nuevo
 
Mensajes: 30
Registrado: 2011-04-23 03:25 @184
Ubicación: Santiago, Chile

Re: Buscar y reemplazar palabras en un archivo

Notapor explorer » 2011-05-15 13:44 @614

Bueno, lo que puedes hacer es abrir un fichero temporal, en modo escritura.
Luego, cambiar el print de la línea 10 para que, en vez de enviarlo hacia la salida estándar, lo haga a ese nuevo fichero temporal.
Después del bucle, solo tienes que hacer un rename 'temporal', 'kk.txt'; para que el temporal, ya modificado, sustituya el archivo original.

Todo esto lo tienes explicado en la pregunta How do I change, delete, or insert a line in a file, or append to the beginning of a file? del perlfaq5.

Como se comenta ahí, se puede usar el tradicional Tie::File o el más moderno File::Slurp:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. use File::Slurp qw( edit_file_lines ) ;
  7.  
  8. my $renglon = 0;
  9.  
  10. edit_file_lines { $_ = '' if ++$renglon == 2 } 'kk.txt' ;
  11.  
  12. __END__
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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: Buscar y reemplazar palabras en un archivo

Notapor Tikygaki » 2011-05-15 14:09 @631

wooo Sí funcionó, muchas gracias, en serio que me sacaron de un apuro. Una última cosa, y no sé si deba ponerlo aquí. Lo que pasa es que intento hacer una página web, y en el HTML pongo en lista cada renglón que tiene, por ejemplo:

Hola
yo
uso
Perl

y con un checkbox, selecciono cada renglón que quiero borrar, eso me lo envía al .pl que estoy haciendo y se supone que los que seleccione se deben borrar. Ya sé cómo borrar un renglón en especifico, pero no sé cómo hacer que se borren según el array.
Tikygaki
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2011-05-15 12:22 @557

Siguiente

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron