next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Subrutinas Sup: Hashes Ant: Troceado de un hash Err: Si hallas una errata ...


Práctica: Ordenar por Calificaciones

Se tiene un fichero de entrada con calificaciones de alumnos como el que sigue:
Ferrer Pérez, Eduardo & 9'6\\
García  García, Laura & 7'5 \\
García Medina, Anai & 6'5\\
García Rodríguez, Pedro & 7'2\\
González del Castillo, Jorge & 5'0\\
Hernández Pérez, Daniel & 5'0\\
Marrero Díaz, Jose Antonio & 8'0\\
Marrero Piñero, Sergio & 7'2\\
Padrón Padrón, Adolfo & 5'0\\
Pedrín Ruiz, Ana & 9'6\\
Pedrínez Pérez, Ignacio & 7'5\\
Piñero Piñero, Antonio & 5'3\\
Pérez García, Adolfo & 9'5\\
Pérez González, Germán & 5'0\\
Pérez Pedrínez, Maria & 5'0\\
Ramos Ramos, Ignacio & 5'0\\
Rodríguez González, Andrés & 10'0\\
Rodríguez Rodríguez, Jorge & 9'2\\
Lea el fichero (para saber como leer un fichero cuyo nombre ha sido pasado en la línea de argumentos léa la sección 2.1 ) de manera que los elementos queden almacenados en un hash indexado en los nombres de los alumnos. Ordene el hash en orden decreciente de calificaciones. Observe que las números se han escrito según la convención española de usar apóstrofes en vez del punto decimal. Una posibilidad es que utilice el operador de sustitución para convertirlo a punto. Por ejemplo, $a =~ s/'/./ sustituirá el primer apóstrofe en $a por un punto. También le puede ayudar el uso de paréntesis con memoria en expresiones regulares. Veamos un ejemplo:
$ perl -de 0 notas.txt
  DB<1> $a = <>
  DB<2> p $a
Ferrer Pérez, Eduardo & 9'6\\
  DB<3> @b = $a=~/(.*)\s+\&\s+(\d+'\d*).*/
  DB<4> p "@b"
Ferrer Pérez, Eduardo 9'6
  DB<5> x @b
0  'Ferrer Pérez, Eduardo'
1  '9\'6'

El uso de la expresión regular en la línea 3 en un contexto de lista hace que queden en @b las cadenas que casaron con las expresiones regulares en el primer y segundo paréntesis.

Puede que le convenga leer las secciones 4.1, 4.2 y 4.4 y en particular el uso de paréntesis y el operador de sustitución en las expresiones regulares.

Para la ordenación repase la sección 1.7.16 y en particular el ejemplo en el que los usuarios del sistema se ordenan según su uid.


next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Subrutinas Sup: Hashes Ant: Troceado de un hash Err: Si hallas una errata ...
Casiano Rodríguez León
2006-02-21