• 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 & 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: 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.005 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.001 segundos, usando GeSHi 1.0.8.4


o algo por el estilo.
¡¡¡Saludos!!!
panterozo
Perlero nuevo
Perlero nuevo
 
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.001 segundos, usando GeSHi 1.0.8.4


Sin comentarios xD...
panterozo
Perlero nuevo
Perlero nuevo
 
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.001 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.002 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.001 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 nuevo
Perlero nuevo
 
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.001 segundos, usando GeSHi 1.0.8.4
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
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.001 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.002 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

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