Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Ordenación de un arreglo alfanumérico

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Experto
Mensaje Sab Nov 10, 2007 3:17 pm
Lor
Perlero Nuevo
Perlero Nuevo
Registrado: 28 Abr 2005
Mensajes: 88
Ubicación: Argentina, Santa FE
Ordenación de un arreglo alfanumérico Responder citando

Agradecería si me pudiesen explicar cómo puedo lograr el ordenamiento de un arreglo formado por caracteres alfanuméricos donde al ordenar tenga en cuenta SOLO la parte numérica y no el carácter

Código:
100A - 200 - 300 - 210B - 4000 - 220 - 410-  300A - 3100 -


Es decir, obtener:

Código:
100A  - 200-  210B - 220 - 300 - 300A - 410 - 3100 - 4000


Este arreglo lo obtengo de una consulta SELECT, son códigos:

Perl:
my (%componentes)=
{
my $ref = $dbh_m->selectall_arrayref( " SELECT cp.id_comp_princ, cp.nombre, " .
                                        " cp.codi_comp_princ" .
                                        " FROM componentes_princ cp " .
                                        " WHERE cp.estado = 'A' " .
                                        " ORDER by cp.id_comp_princ");

  foreach (@$ref) {$componentes{${$_}[0]} = ${$_}[2] . ' )- '. ${$_}[1] }
        }
  my (@componentes) = sort { $componentes{$a} cmp
                            $componentes{$b}} keys %componentes;


Con el sort NO LOGRO lo que necesito.

¡¡¡ Muchas gracias !!!
Mensaje Sab Nov 10, 2007 5:24 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 3893
Ubicación: Valladolid, España
Responder citando

Tienes que hacer una ordenación numérica, no alfanumérica:
Perl:
my @componentes = qw(100A 200 300 210B 4000 220 410 300A 3100);

@componentes = sort { $a <=> $b } @componentes;

print "@componentes";

Nota la diferencia: en lugar de cmp, usamos <=>.
Mensaje Dom Nov 11, 2007 7:30 am
Lor
Perlero Nuevo
Perlero Nuevo
Registrado: 28 Abr 2005
Mensajes: 88
Ubicación: Argentina, Santa FE
continua Error Responder citando

Explorer, muchas gracias, pero yo ya lo he probado colocando el <=> y el pl no se ejecuta, no me tira error, pero no puedo ejecutarlo

Perl:
my (%componentes)=
{
my $ref = $dbh_m->selectall_arrayref( " SELECT cp.id_comp_princ, cp.nombre, " .
                                        " cp.codi_comp_princ" .
                                        " FROM componentes_princ cp " .
                                        " WHERE cp.estado = 'A' " .
                                        " ORDER by cp.id_comp_princ");

  foreach (@$ref) {$componentes{${$_}[0]} = ${$_}[2] . ' )- '. ${$_}[1] }
        }
  my (@componentes) = sort { $componentes{$a}   <=>
                            $componentes{$b}} keys %componentes;
Mensaje Dom Nov 11, 2007 8:06 am
Lor
Perlero Nuevo
Perlero Nuevo
Registrado: 28 Abr 2005
Mensajes: 88
Ubicación: Argentina, Santa FE
Responder citando

MUCHAS GRACIAS, ya detecte el ERROR, estaba en el paréntesis de concatenación, por alguna causa tira error, lo saqué y funciona:

Perl:
my (%componentes)=
{
my $ref = $dbh_m->selectall_arrayref( " SELECT cp.id_comp_princ, cp.nombre, " .
" cp.codi_comp_princ" .
" FROM componentes_princ cp " .
" WHERE cp.estado = 'A' " .
" ORDER by cp.id_comp_princ");

    foreach (@$ref) {$componentes{${$_}[0]} = ${$_}[2] . ' )- '. ${$_}[1] }
}
my (@componentes) = sort { $componentes{$a} <=>
$componentes{$b}} keys %componentes
Publicar nuevo tema   Responder al tema    Foros de discusión -> Experto Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group