• Publicidad

Duda de estadísticas con hash

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Duda de estadísticas con hash

Notapor cblancar » 2008-08-04 04:34 @232

Hola, buenos días a todos.

Partiendo de un fichero con este formato:
Fecha;dato1;dato2;dato3;

ej:
Código: Seleccionar todo
20080804;1;2;23;
20080804;1;2;45;
20080804;1;2;41;
20080804;1;2;23;
20080804;1;3;54;


Necesito que para el conjunto dato1 y dato2 (sin repetirse) me saque cuántos elementos (datos3) cuelgan de ellos.

Para ello hago lo siguiente
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $comando = "gzcat fichero.gz |"
parse_file($comando);

foreach my $VAR1 (keys %{$REPORT})          
{
   print ESCRITURA $VAR1."\n";
}

sub parse_file{

    my $file = shift;
    open(FH,$file) || die "Cannot open file: $!";

    while(<FH>)
    {

           if (m/\;([^\;]+\;[^;]+)/) {
              $REPORT->{$1}++;
           }
     }
     close(FH);
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Ejemplo del fichero que me sacaría:
Código: Seleccionar todo
1;2
1;3


Con esto me sacaría el conjunto datos1;datos2 sin repetirse... pero ¿cómo hago para que me saque ahora cuántos datos3 cuelgan de cada uno de los conjuntos?

Y lo que necesitaría sacar en el supuesto anterior sería lo siguiente:

1;2;3 número de elementos sin repetirse que cuelgan del conjunto 1;2
1;3;1 número de elementos sin repetirse que cuelgan del conjunto 1;3

Muchas gracias por vuestra ayuda.
cblancar
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2008-07-15 01:41 @112

Publicidad

Notapor explorer » 2008-08-04 05:21 @264

Esta es una forma:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

my %visto;

while ( <DATA> ) {
    my ($fecha,$dato1,$dato2,$dato3) = split q{;};

    $visto{"$dato1|$dato2"}->{$dato3}++;
}

foreach my $clave (    sort keys   %visto    ) {
    print "$clave;", scalar keys %{$visto{$clave}}, "\n";
}

__DATA__
20080804;1;2;23;
20080804;1;2;45;
20080804;1;2;41;
20080804;1;2;23;
20080804;1;3;54;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Lo que hacemos es construir una estructura de hash de hash (igual como lo tenías tu). A la hora de sacar el número de elementos repetidos por $clave, usamos la función scalar() para pasar a número la cantidad de claves (keys()) que cada hash tiene.
Última edición por explorer el 2008-08-04 05:25 @267, editado 1 vez en total
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor cblancar » 2008-08-04 05:23 @266

Muchísimas gracias
cblancar
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2008-07-15 01:41 @112


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 26 invitados