• Publicidad

Quitar espacios extra a una cadena de caracteres

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

Quitar espacios extra a una cadena de caracteres

Notapor Chava » 2010-11-01 18:48 @825

Hola a todos.

Quiero quitarle a una cadena de texto todos los espacios, saltos de línea, vueltas de carro y tabulaciones extra, es decir, cuando existan dos o más.

Estaba intentando solo con los saltos de línea y usé estos códigos pero no me funcionaron correctamente.

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
$texto =~ s/\n\n*//g;
$texto =~ s/\n{2,}//g;
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Gracias de antemano ;D
Chava
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2010-11-01 18:33 @814

Publicidad

Re: Quitar espacios extra a una cadena de caracteres

Notapor explorer » 2010-11-01 19:00 @833

Bienvenido a los foros de Perl en Español, Chava.

Tendrías que dar algunos detalles de cómo quieres quitar esos caracteres.

Por ejemplo, una forma radical de eliminar los caracteres de espacio duplicados, sería así:

$texto =~ s/\s+/ /g;

pero con esto también estamos quitando los retornos de carro. Con esto:

$texto =~ s/(\s)\1+/$1/g;

reemplazamos conjuntos de espacios en blanco (tabuladores y retornos de carro incluidos) por uno solo.

Sacado de perldoc perlfaq4, pregunta How do I remove consecutive pairs of characters?.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Quitar espacios extra a una cadena de caracteres

Notapor Chava » 2010-11-01 19:22 @848

Gracias explorer.

Ahora.
Ahí va el problema: necesito guardar todo lo de una cadena de texto en un arreglo, cada parte del arreglo se dividirá por un espacio en blanco.

ejemplo: $texto="hola mundo" ------> @texto2 = ("hola","mundo")

y necesito saber cuándo existe un newline \n para almacenarlo en el arreglo.

ejemplo: $texto = "hola mundo. \n ¿cómo estás?" -------> @texto2 = ("hola","mundo.",\n,"¿cómo","estás?)

Tomando en cuenta claro que el \n es la nueva línea y no estará escrita de ese modo.
Chava
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2010-11-01 18:33 @814

Re: Quitar espacios extra a una cadena de caracteres

Notapor explorer » 2010-11-01 19:50 @868

Humm... el asunto no es trivial...

Con @texto2 = split " ", $texto; puedes separar el texto por los espacios en blanco, pero perderíamos a los retornos de carro. Necesitamos guardarlo.

Podemos indicar a split() que haga eso, que guarde los delimitadores que encuentre. Algo como

split /(\s+)/, $texto;

Con los paréntesis de captura, split() guarda los espacios intermedios, como parte de la lista de elementos que devuelve.

Y luego, necesitamos quitar los campos que estén compuestos solo de espacios y/o tabuladores, dejando solo los campos que tengan palabras o avances de línea. Quedaría:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $texto = "hola   mundo. \n ¿cómo estás?";
my @texto = map { s/\n+/\n/; $_ } grep { ! /^[ \t]+$/  } split /(\s+)/, $texto;
say join q[|], @texto;  # sale "hola|mundo.|\n|¿cómo|estás?
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Con split(), partimos el $texto, por los espacios en blanco. El resultado son palabras y los espacios que los separan. Luego, con el grep(), filtramos los campos que no (!) estén compuestos exclusivamente de espacios en blanco y/o tabuladores, con lo que nos quedamos con los campos de las palabras y los avance de línea.

Editado: añadido map() para quitar los retornos de carro repetidos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Quitar espacios extra a una cadena de caracteres

Notapor Chava » 2010-11-01 20:38 @901

Otra vez: ¡muchas gracias, explorer!

Ya quedó todo bien, sí funcionó.
Chava
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2010-11-01 18:33 @814


Volver a Básico

¿Quién está conectado?

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