Página 1 de 1

Sustituciones en ficheros

NotaPublicado: 2005-04-25 07:43 @363
por ansi_anso
Estoy aprendiendo Perl y uno de los ejercicios que estoy haciendo es sustituir todas las palabras de un fichero (por ejemplo todas las "este"). Hago esto

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!perl
  2.  
  3. open (FICH, "+>Este.txt") || die "No se pudo abrir el archivo\n";;
  4. while (my $linea = <FICH>)
  5. {
  6.         my $cont1 = $linea =~ s/este/aquel/g;
  7.         print FICH $linea;
  8.         $cont2 = $cont2 + $cont1;
  9. }
  10. close (FICH);
  11. print "Se han sustituido $cont2 veces la palabra este por aquel";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Pero el fichero aparece vacío. Creo que es porque no lo abro correctamente, porque las sustituciones en la variable $linea sí las hace bien, además si no pongo la línea de "print FICH $linea;" me cuenta bien las sustituciones pero cuando la pongo la variable $cont2 no tiene valor (lo de $cont1 y $cont2 es porque me pide también cuántas veces he hecho la sustitución). ¿Acaso una vez hago print en el fichero se borra el contenido?
¿Alguien me puede ayudar?
-GRACIAS-

NotaPublicado: 2005-04-25 08:52 @411
por monoswim
No puedes hacer las dos cosas al mismo tiempo, debes hacer primero hacer una lectura del fichero y cargar todo en un array...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open(FICHERO,"<ficheroi.txt");
  2. my @lineas = <FICHERO>;
  3. close FICHERO;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Ahora modificamos el array

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. foreach my $linea (@lineas){
  2. ...
  3. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


y ahora abrimos el fichero borrando todo y le escribimos el nuevo contenido

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open(FICH,">archivo.txt");
  2. foreach my $linea (@lineas){
  3.     print FICH "$linea\n";
  4. }
  5. close(FICH);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

¿ Se entiende ? Espero que te sirva.

Saludos

Re: Sustituciones en ficheros

NotaPublicado: 2005-07-24 19:56 @872
por explorer
ansi_anso escribiste:Estoy aprendiendo Perl y uno de los ejercicios que estoy haciendo es sustituir todas las palabras de un fichero (por ejemplo todas las "este").


Cuando tengas más experiencia, prueba a usar Perl directamente desde la línea de comandos para hacer esa tarea.

Por ejemplo, para cambiar todas las apariciones de la palabras este por aquel, se puede hacer:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
perl -pi -e 's/este/aquel/g' fichero.txt
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Si usas Windows, cambia las ' por ".