• Publicidad

Eliminar espacios en blanco de un array

¿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 de un array

Notapor spacepecjks » 2010-02-24 18:19 @805

¡Hola a todos!

¿Saben?, tengo un problemilla con un array. Resulta que hago una consulta y lo almaceno en un array, pero la consulta queda guardada de esta forma:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
@prueba = ("uno", "", "", "dos", "", "", "tres", "cuatro", "");
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Y me gustaría que me ayudaran a pasar este array a esta forma:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
@prueba = ("uno", "dos", "tres", "cuatro");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


He intentado de varias formas, pero no lo he logrado. Espero que alguno de ustedes me dé una idea o una solución. De antemano: ¡Gracias!
Última edición por explorer el 2010-02-24 19:17 @845, editado 2 veces en total
Razón: El "urgente" no es necesario ;)
Avatar de Usuario
spacepecjks
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2010-01-29 12:50 @576

Publicidad

Re: Eliminar espacios en blanco de un array

Notapor kidd » 2010-02-24 18:54 @829

Hola,

Necesitaríamos ver el contenido de entrada y cómo lo estás separando para convertirlo en un array para así poder ayudarte en ver dónde podría estar el error.

Mientras tanto, podrías eliminar los elementos vacíos de tu array de la siguiente manera:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my @prueba = ('uno', '', '', 'dos', '', '', 'tres' , 'cuatro' , '');

@prueba = grep { defined && !/^\s*$/ } @prueba;

#@prueba = ( 'uno', 'dos',  'tres',  'cuatro' );
 
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Pero lo mejor sería solucionar el problema desde el momento en que estás creando el array.

Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Re: Eliminar espacios en blanco de un array

Notapor explorer » 2010-02-24 19:25 @850

Si solo nos interesan los elementos distintos del vacío, nos valdría con

@prueba = grep { "$_" } @prueba;

pero si alguno de los elementos tiene espacios en blanco, hay que usar algo como lo indicado por kidd.
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 de un array

Notapor spacepecjks » 2010-02-25 11:32 @522

Gracias Explorer y Kidd, funcionó lo que me dijeron, apliqué la de:

@prueba = grep { "$_" } @prueba;

Y se corrigió ese detalle. Saludos.
Avatar de Usuario
spacepecjks
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2010-01-29 12:50 @576

Re: Eliminar espacios en blanco de un array

Notapor erv-Z » 2010-02-26 14:58 @665

Bueno, aquí el mio ¡je,je,je! xD.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!usr/bin/perl
  2.  
  3. #Array prueba con espacio en blanco
  4. my @array = ('uno', '', '', 'dos', '', '', 'tres' , 'cuatro' , '');
  5.  
  6. #Tomamos solos los que NO contengan espacio y lo guardamos en un nuevo array
  7. @nuevo_array = grep (/\S+/g, @array);
  8.  
  9. #Incrementador desde 0 hasta el número de elemento del array
  10. for($i=0;$i < scalar(@nuevo_array);$i++){
  11.  
  12. #Imprimimos los elementos del array...
  13. print @nuevo_array[$i], "\n";
  14. }
  15. __END__
  16. Salida:
  17. $ perl a.pl
  18. uno
  19. dos
  20. tres
  21. cuatro
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
erv-Z
Perlero nuevo
Perlero nuevo
 
Mensajes: 158
Registrado: 2009-07-25 13:00 @583

Re: Eliminar espacios en blanco de un array

Notapor explorer » 2010-02-26 15:11 @674

Lo siento, erv-Z, pero

print @nuevo_array[$i], "\n";

no es "éticamente" -v5- perliano.
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 de un array

Notapor erv-Z » 2010-02-26 15:35 @691

No entendí.
erv-Z
Perlero nuevo
Perlero nuevo
 
Mensajes: 158
Registrado: 2009-07-25 13:00 @583

Re: Eliminar espacios en blanco de un array

Notapor explorer » 2010-02-26 17:55 @788

A ver...

En Perl, el sigil (carácter especial que precede a las variables), indica el tipo de dato que obtenemos de esa variable.

Si pones un '@' quiere decir que quieres obtener una lista de valores. Un ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my @arreglo = qw( Una lista de palabras obviamente corta );

my @extracto = @arreglo[1,3,5];  # mete 'lista', 'palabras' y 'corta' en @extracto
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


En cambio, con '$' estamos indicando que solo queremos obtener un valor:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my @arreglo = qw( Una lista de palabras obviamente corta );

my $extracto = $arreglo[0];  # mete 'Una' en $extracto
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Por ello, tu tienes puesto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print @nuevo_array[$i], "\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
que, literalmente, quiere decir: "pinta la lista (@) de valores, extraídos desde la variable @nuevo_array, correspondientes al índice $i".

Sí, funciona, pero... como ves, hay "algo" raro... No pega "pintar una lista de valores", cuando realmente lo que quieres es "pintar un valor".

Deberías haber escrito:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print $nuevo_array[$i], "\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
que quiere decir: "pinta el ($) elemento $i-ésimo del arreglo @nuevo_array".
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 de un array

Notapor erv-Z » 2010-02-26 18:23 @808

Si, ya entendí xD.
erv-Z
Perlero nuevo
Perlero nuevo
 
Mensajes: 158
Registrado: 2009-07-25 13:00 @583


Volver a Básico

¿Quién está conectado?

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

cron