Sab Nov 10, 2007 3:17 pm
|
 |
Lor
Perlero Nuevo

|
Registrado: 28 Abr 2005
Mensajes: 88
Ubicación: Argentina, Santa FE
|
|
| Ordenación de un arreglo alfanumérico |
|
|
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 !!! |
|
|
|

Sab Nov 10, 2007 5:24 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 3893
Ubicación: Valladolid, España
|
|
|
|
|
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 <=>. |
|
Dom Nov 11, 2007 7:30 am
|
 |
Lor
Perlero Nuevo

|
Registrado: 28 Abr 2005
Mensajes: 88
Ubicación: Argentina, Santa FE
|
|
| continua Error |
|
|
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; |
|
|

Dom Nov 11, 2007 8:06 am
|
 |
Lor
Perlero Nuevo

|
Registrado: 28 Abr 2005
Mensajes: 88
Ubicación: Argentina, Santa FE
|
|
|
|
|
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 |
|
|
Powered by phpBB © 2001, 2005 phpBB Group
|