Perl - Perl problema cencillo para conocedores.

 
Vista:

Perl problema cencillo para conocedores.

Publicado por LUIS (2 intervenciones) el 27/06/2006 23:21:36
Saludos.

Tengo unas dudas necesito hacer una table de resultados pareceido a lo que hace exel bueno no se si esposible realizar una tabla de resultados ya que mis datos son de faltas digamos lo de otra manera

Asi es como o necesito hacer.
Nombre - Lunes - Martes - Miercoles
Luis 2 0 3
Nancy 0 3 1

Y asi es como yo me aparecen ami.
luis,2,lunes
nancy,3,martes
luis,3,nancy,1,miercoles

Entonces no se si esposible que se pueda hacer asi. Lo mas que he logrado hacer es un grep -n luis resultados.txt

pero asi lo unico que consigo es un registro alguien me podria explicar como lo puedo lograr.

De antemano GRACIAS.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Perl problema cencillo para conocedores.

Publicado por Joaquin Ferrero (48 intervenciones) el 28/06/2006 13:32:28
Supongamos que el fichero resultados.txt sea como tu dices:
* Un registro por línea
* Cada registro está compuesto de campos separados por comas
* El último campo es el día de la semana
* El resto de los campos se organizan por pares nombre del alumno, faltas cometidas

Hay que hacer un programa que lea un fichero de ese tipo y entregue un resultado de la siguiente forma:
* La primera línea será de cabecera, compuesta por la palabra Nombre y seguida por todos los días de la semana
* Las siguientes líneas serán los alumnos (en orden alfabético) seguidos por las faltas cometidas cada día
* Todos los campos estarán separados con un caràcter tabulador, para facilitar su importación a otros programas
* El programa se debe ejecutar pasándole como argumentos los ficheros con las faltas cometidas:
programa.pl resultados.txt

El siguiente programa resuelve el problema:

#!/usr/bin/perl
use warnings;
use strict;

my @dias = qw(lunes martes miercoles jueves viernes);
my %faltas;

# Leemos la entrada
while ( <> ) {
my @datos = split(',');

# El último dato es el día de la semana
my $dia = pop(@datos);
chomp($dia); # Quitamos el retorno de línea
#print $dia;

# Ahora leemos todos los alumnos y sus faltas
while ( @datos ) {
my $alumno = shift(@datos);
my $faltado = shift(@datos);
#print "\t$alumno => $faltado";

# Guardamos la información
$faltas{$alumno}{$dia} += $faltado;
}
}

# Pintamos la tabla resumen
print "Nombre\t", join("\t", @dias), "\n";
foreach my $alumno ( sort keys %faltas ) {
print "$alumno\t";
foreach my $dia ( @dias ) {
if ( $faltas{$alumno}{$dia} ) {
print "$faltas{$alumno}{$dia}";
} else {
print "0";
}
print "\t";
}
print "\n";
}

Si el fichero resultados es:
luis,2,lunes
nancy,3,martes
luis,3,nancy,1,miercoles

la salida es:
Nombre lunes martes miercoles jueves viernes
luis 2 0 3 0 0
nancy 0 3 1 0 0
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar