Jak na kogos kto wlasnie zaczal to masz spore pojecie - gratuluje!
No to lecimy z tymi pomiarami... ja do pomiarow uzywam RRDtool - samo robi sporo za mnie i ladnie kresli wykresy ale to nie uniwersalne narzedzie... poza tym bez Perl'a byloby z RRD ciezko :P
Mozesz zbierac dane z pliku i trzymac je w pamieci jako tablice tablic (AoA - array of arrays) czyli $tablica[x][y]=$wartosc albo jako hash tablic czyli $wyniki{$parametr}[y].
Co do push - dziala tylko na tablicach, zastosowanie na skalarach nie ma sensu a na hashu juz w ogole bo te sa nieuporzadkowane Na podstawie informacji jakie dostarczyles zakladam ze:
- plik wejsciowy ma w 1 linii iles parametrow zapisanych jako: A=xxx B=yyy C=zzz
- wartosci sa tylko liczbowe, cokolwiek nieliczbowe traktujemy jako UNDEFINED i pomijamy - nie wliczamy do sredniej z pomiarow - tak jakby pomiar sie nie odbyl, wiec jesli mamy 3 wartosci i 5 undefined to srednia liczymy dla 3 a nie 8 elementow
- plik zawiera dowolna ilosc pomiarow - 1 w kazdej linii
- srednia i mediana beda liczone dla calego pliku a nie dla kazdej linii osobno
Kod:
#!/usr/bin/perl
use warnings;
use strict;
my %wyniki;
open (FH, $ARGV[0]) || die "Can't open input file: $!\n";
while (<FH>) {
chomp;
my @data = split(/\s+/); # dzielimy na pola tam gdzie 1+ bialych znakow
foreach (@data) {
my ($key, $val) = split(/=/);
if ($val != 0 && $val =~ /^\d+(\.\d+)?$/) { push@{$wyniki{$key}}, $val };
}
}
close (fH);
Sposob odwolania do tablicy jest prosty - @{$wyniki{'klucz_hasha'}} a do elemetnu jako $$wyniki{parametra}[n] lub ${$wyniki{parametr}}[n]