[Perl] - Sort y Matrices

Joel Muņoz joel_munoz@hotmail.com
Fri, 24 Aug 2001 19:20:10 +0000


Hola Raza!

Aqui de nuevo desde las faldas del cerro de la silla, i'ņor!

Pues tengo un "problemita" para variar y no perder la costumbre.

Tengo (en win98) una base de datos TXT de esta manera

nombre|apellido paterno|apellido 
materno|rectoria|direccion|departamento|email|telefono|ext|

Y necesito ordenarla de acuerdo a rectoria, luego direccion, luego 
departamento y por ultimo apellidos y nombre

No puedo usar ODBC porque necesariamente la base de datos debe ser TXT.

Bueno, pues para comparar cada uno de los campos meto la BD a un arreglo, 
mejor dicho a una matriz.

Y para ordenarla he intentado varias cosas:
Intente utilizar SORT, pero no encontre la manera de ordernar los registros 
de acuerdo a un solo campo.

Intente implementando el metodo QuickSort, pero solo funciona con numeros, 
no con letras (Obviamente cambie los operadores para comparar Cadenas en 
lugar de numeros) .... alguien alguna idea, sugerencia o al menos sabe de un 
puente muy alto para lanzarme de el?

PD Aqui anexo el metodo por si alguien lo necesita

Gracias Raza!

- Joel -

---------------------------

# Implementacion del Metodo QuickSort en Perl
# Agosto 2001
# Joel Muņoz M.
# joel_munoz@hotmail.com
# Palabras Clave : Funcion, QuickSort, Recursividad, Arreglos, While

########
# MAIN #
########

@arreglo = (9,8,7,6,4,5,3,2,1);
#@arreglo = ("a","z","v","b","f","r","s","a","a1","G","A");
$num_elementos_vector=@arreglo;
@ordenado = &ordenar(@arreglo, 0, $num_elementos_vector);
print "ordenado = @ordenado \n";

##############################
# Funciones y Procedimientos #
##############################

##################################################################
# Funcion Ordena -                                               #
# Implementacion del Metodo Quicksort para ordenar un arreglo    #
# Se manda llamar con:                                           #
# &ordenar(@Arreglo_a_Ordenar, Primer_Elemento, Ultimo_Elemento) #
# Devuelve un valor Array                                        #
##################################################################
sub ordenar
{
   local(@vect)=@_;
   $ind_der=pop(@vect);
   $ind_izq=pop(@vect);
   $i = $ind_izq;
   $j = $ind_der;
   $mitad = ($ind_izq + $ind_der) / 2;
   $elem = $vect[$mitad];
   do {
      while ($vect[$i] < $elem)
      {          $i++;  }
      while ($elem < $vect[$j])
      {          $j--;  }
      if ($i <= $j) # intercambio de Valores
        {
          $aux = $vect[$i];
          $vect[$i] = $vect[$j];
          $vect[$j] = $aux;
          $i++;
          $j--;
        }
    } while ( $i < $j);
  if ($ind_izq <= $j){&ordenar (@vect, $ind_izq, $j)};
  if ($i <= $ind_der){&ordenar (@vect, $i, $ind_der)};

return @vect
} # Fin de Ordena



_________________________________________________________________
Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp