[Milan-pm] R: incolonnare dati

Max Flebus max.flebus at it.easynet.net
Sun Nov 8 09:20:26 PST 2009


Ho rimesso un po' di escape ("\") che erano spariti nella mail dall'ottimo
esempio di Oha e aggiunta l'apertura dei file .xxx (ovviamente da modificare
con il suffisso giusto), tanto perchè Paola abbia la pappa pronta :) 
Un po' di commenti non fanno mai male :)
 
MaX

use strict;
use warnings;
use Data::Dumper;
my %data;
my %cols;
while(<*.xxx>)  # ottengo la lista dei file con suffisso .xxx
{
  open "FILE", $_ or die;   # Apro il file o morte!
  while (<FILE>)            # lo leggo
  {
   chomp;
   my @cols = split /\s+/;  # separo le colonne
   my $first = shift @cols or next; # tengo la prima colonna
   my $second = shift @cols;        # e la seconda
   my %other = map { /^([^(]+)\((\d+)\)\*?/; $cols{$2}++; ($2,$1); } @cols;
# il resto lo metto nell'hash %other ad esempio H380(138) diventa
$other{138} = H380
   $other{__perc} = $second;        # metto in %other anche il valore della
seconda colonna
   $data{$first} = \%other;         # metto in nell'hash $data l'hash %other
  }
}
 
foreach my $k (sort keys %data)     # $k sono tutti i valori della prima
colonna
{
   my $other = $data{$k};           # recupero l'hash
   print $k, "\t", $other->{__perc}, "\t"; # stampo l'intestazione della
riga
   foreach my $c (sort { $a <=> $b } keys %cols) { # itero sulle colonne
(ordinate)
       my $v = $other->{$c};        # prendo la colonna c
       print $v ? "$v($c)\t" : "-       \t"; # e ne stampo il valore o degli
spazi bianchi
   }
   print "\n";                      # nuova riga
}

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/milan-pm/attachments/20091108/449515ab/attachment.html>


More information about the Milan-pm mailing list