• Publicidad

Eliminar espacios en blanco

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

Eliminar espacios en blanco

Notapor Therion777 » 2011-08-09 15:18 @679

Saludos. Mi pregunta es muy simple. Tengo un archivo, archivo.txt, con información de esta forma:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Ejemplo de salida de un archivo

Para la segunda mitad del semestre

Es necesario dar por hecho la formula = 3.54 = 6.5

Todos los campos

 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Y quiero tener algo así, donde todos los espacios vacíos se eliminen:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Ejemplo de salida de un archivo
Para la segunda mitad del semestre
Es necesario dar por hecho la formula = 3.54 = 6.5
Todos los campos
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


¿Alguna idea?

Saludos.
Therion777
Perlero Nuevo
Perlero Nuevo
 
Mensajes: 14
Registrado: 2010-08-30 15:30 @687

Publicidad

Re: Eliminar espacios en blanco

Notapor explorer » 2011-08-09 15:54 @704

Es muy sencillo: te vale con reducir todas las secuencias de caracteres de fin de línea, a uno solo:

$texto =~ s/\n\n+/\n/g;
JF^D Perl Programming Language
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 12879
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Eliminar espacios en blanco

Notapor Therion777 » 2011-08-09 16:06 @712

¿¿¿ Algo así ???

#!/usr/local/bin/perl
################## abre la lista
open( UNO, "matematicas.txt" ) || die "No fue posible abrir matemáticas.txt\n";
open( DOS, ">calculo.txt" ) || die "No fue posible abrir calculo.txt\n";
while ($texto = <UNO>)
{
$texto =~ s/\n\n+/\n/g;
print "$texto";
print DOS "$texto\n";
}
close UNO;
close DOS;
###########################################################

Porque sigue haciendo lo mismo :-( no quita los renglones en blanco.
Therion777
Perlero Nuevo
Perlero Nuevo
 
Mensajes: 14
Registrado: 2010-08-30 15:30 @687

Re: Eliminar espacios en blanco

Notapor panterozo » 2011-08-09 17:27 @769

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. while ($texto = <UNO>)
  2. {
  3. $texto =~ s/\n\n+/\n/g;
  4. print "$texto";
  5. print DOS "$texto\n";
  6. }
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4


Cuando haces el while(), separa las líneas del texto... así que uno de los valores de la variable $texto, debe tener solo un salto de línea \n...

entonces,

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $newTexto = '';
  2. while ($texto = <UNO>)
  3. {
  4. if($texto eq '\n'){
  5.     #~ No se guarda esta variable en el nuevo texto
  6.  }
  7. else{
  8.    #~ Se irá agregando a $newTexto
  9.    $newTexto .= $texto;
  10.  }
  11. }
  12. print $newTexto;
  13.  
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4


o algo por el estilo.
¡¡¡Saludos!!!
panterozo
Perlero Frecuente
Perlero Frecuente
 
Mensajes: 160
Registrado: 2010-01-26 08:36 @400

Re: Eliminar espacios en blanco

Notapor panterozo » 2011-08-09 18:00 @791

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open(F,"<datos.txt");
  2. my $newTexto = '';
  3. while(my $texto = <F>){
  4.         my @array = split(//,$texto);
  5.         if(scalar (@array) > 1){
  6.                 while($array[$#array] =~ m/\n/){
  7.                         pop(@array);
  8.                 }
  9.  
  10.                 foreach(@array){
  11.                         $newTexto .= $_;
  12.                 }
  13.                 $newTexto .= "\n";
  14.         }
  15. }
  16. close(F);
  17. print $newTexto;
  18. exit;
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4


Sin comentarios xD...
panterozo
Perlero Frecuente
Perlero Frecuente
 
Mensajes: 160
Registrado: 2010-01-26 08:36 @400

Re: Eliminar espacios en blanco

Notapor Therion777 » 2011-08-09 18:01 @792

Mmmm, interesante, pero sigue igual: no hace nada.

Y creo que esta línea está mal:
$newTexto .= $texto;
Última edición por Therion777 el 2011-08-09 18:07 @796, editado 1 vez en total
Therion777
Perlero Nuevo
Perlero Nuevo
 
Mensajes: 14
Registrado: 2010-08-30 15:30 @687

Re: Eliminar espacioes en blanco

Notapor Therion777 » 2011-08-09 18:27 @810

Gracias, Panterozo, tu programa hace una parte de lo que necesitaba: quita el primer espacio que tenía en mi archivo pero las demás líneas siguen igual, así que lo solucioné de la siguiente forma.

panterozo escribiste:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open(F,"<datos.txt");
  2. my $newTexto = '';
  3. while(my $texto = <F>){
  4.         my @array = split(//,$texto);
  5.         if(scalar (@array) > 1){
  6.                 while($array[$#array] =~ m/\n/){
  7.                         pop(@array);
  8.                 }
  9.  
  10.                 foreach(@array){
  11.                         $newTexto .= $_;
  12.                 }
  13.                 $newTexto .= "\n";
  14.         }
  15. }
  16. close(F);
  17. print $newTexto;
  18. exit;
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4


Sin comentarios xD...


Código de cómo lo solucioné

Tengo un archivo con líneas como
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Ejemplo = a superior

Segundo comentario que se da en la relación

Seguimiento a contextos
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Aquí la cuestión es que tengo espacios que separan las líneas de texto.

Programa:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!bin/perl
  2. open( UNO,  "mate.txt" ) || die "No fue posible abrir  mate.txt\n";
  3. open( DOS, ">calculo.txt" ) || die "No fue posible abrir  calco.txt\n";
  4.       my $newTexto = '';
  5.       while(my $texto = <UNO>){
  6.               my @array = split(//,$texto);
  7.               if(scalar (@array) > 1){
  8.                       while($array[$#array] =~ m/\n/){
  9.                               pop(@array);
  10.                       }
  11.                       foreach(@array){
  12.                               $newTexto .= $_;
  13.                       }
  14.                       $newTexto .= "\n";
  15.               }
  16.       }
  17.       close(UNO);
  18.       print DOS "$newTexto";
  19.       close (DOS);
  20. # Esto nos quita el primer espacio del archivo
  21. ###########################################################################################
  22.  
  23. open( DOS, "calculo.txt" ) || die "No fue posible abrir  calculo.txt\n";
  24. open( TRES, ">fisica.txt" ) || die "No fue posible abrir fisica.txt\n";
  25.  
  26. while (  $linea = <TRES> )
  27.    {
  28.         chomp $linea;
  29.         @arrip = "" ;
  30.         @Int = "" ;
  31.         @varest = "" ;
  32.         %hInt = "" ;
  33.         @ruteador = split '=', $linea;    
  34.  
  35. print TRES '$linea';
  36. close(DOS);
  37. close(TRES);
  38.  
  39.  
Coloreado en 0.010 segundos, usando GeSHi 1.0.8.4

Al final nuestro archivo queda:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Ejemplo = a superior
Segundo comentario que se da en la relación
Seguimiento a contextos
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Y todos felices :-)

Sé que es un mega chorro. Si alguien puede resumirlo, adelante :-)
Por el momento así voy a usarlo pero después lo trato de hacer más chico.


Saludos.
Therion777
Perlero Nuevo
Perlero Nuevo
 
Mensajes: 14
Registrado: 2010-08-30 15:30 @687

Re: Eliminar espacios en blanco

Notapor panterozo » 2011-08-09 18:30 @813

panterozo escribiste:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open(F,"<datos.txt");
  2. my $newTexto = '';
  3. while(my $texto = <F>){
  4.         my @array = split(//,$texto);
  5.         if(scalar (@array) > 1){
  6.                 while($array[$#array] =~ m/\n/){
  7.                         pop(@array);
  8.                 }
  9.  
  10.                 foreach(@array){
  11.                         $newTexto .= $_;
  12.                 }
  13.                 $newTexto .= "\n";
  14.         }
  15. }
  16. close(F);
  17. print $newTexto;
  18. exit;
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4


Sin comentarios xD...


Esto a mi me funciona correctamente, tomando el archivo inicial

Therion777 escribiste:Ejemplo de salida de un archivo

Para la segunda mitad del semestre

Es necesario dar por hecho la formula = 3.54 = 6.5

Todos los campos
panterozo
Perlero Frecuente
Perlero Frecuente
 
Mensajes: 160
Registrado: 2010-01-26 08:36 @400

Re: Eliminar espacios en blanco

Notapor creating021 » 2011-08-09 18:40 @819

Mi solución:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open UNO, "matematicas.txt" or die "Error...\n";
  2. open DOS, ">calculo.txt" or die "...";
  3. while (my $linea = <UNO>) {
  4.     chomp $linea;
  5.     if ( $linea ) {
  6.         print DOS "$linea\n";
  7.     }
  8. }
  9. close UNO;
  10. close DOS;
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Vive para Perl en Español
Vive para Perl en Español
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Re: Eliminar espacios en blanco

Notapor explorer » 2011-08-09 19:07 @838

Esta es mi versión:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use File::Slurp;
  3.  
  4. my $texto = read_file('matematicas.txt');
  5.  
  6. $texto =~ s/\n\n+/\n/g;
  7.  
  8. write_file('calculo.txt', $texto);
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4

Y desde la línea de comandos:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. perl -p0 -e 's/\n\n+/\n/g' matematicas.txt > calculo.txt
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4
JF^D Perl Programming Language
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 12879
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Siguiente

Volver a Básico

¿Quién está conectado?

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