Witam.
Mam sporo roboty z plikami zawierającymi wyniki pomiarów. W tej chwili jest to przetwarzane w Excelu, co jest stosunkowo długotrwałe. W dużym skrócie:
Jest kilka plików, zawierających linie z m.in. nazwą parametru i wartością liczbową (zmiennoprzecinkową). Parametrów jest w sumie 20 różnych, z tym, że każdy z nich występuje zmienną ilość razy (od 0 do 10) bo czasem wartość jest niemierzalna, wystąpi błąd, bądź próbek było mniej niż zakładano wcześniej. W efekcie w pliku jest kilkaset linii, które trzeba przetworzyć. Oczywiście każdy parametr osobno. Wypada czasem tak, że ParametrA jest zmierzony 5 razy, ParametrB ma tylko 2 próbki a ParametrC ma próbek 7. Trzeba je zebrać osobno i uśrednić próbki parametru A, B, C itd...
Proste rozwiązanie widzę tak, że każdy parametr ma swoją tablicę (@parametrA) i przy teście wyrażenia regularnego wrzucam przez PUSH to, co wychodzi w zmiennej $2 (push @parametrA, $2). To działa. Niestety do mnie dotarło, że w ten sposób będę miał 20 pętli obliczających średnią i odchylenie standardowe. Wydaje mi się to bardzo nieeleganckim rozwiązaniem. Idealna byłaby tablica dwuwymiarowa.
$matrix[0] - parametrA
$matrix[1] - parametrB itd
wtedy $matrix[0][0] zawiera pierwszą wartość parametrA, $matrix[0][1] jest drugą wartością parametrA itd.
$matrix[1][0] zawiera pierwszą wartość parametrB itd.
Przeliczenie wszystkich 20 parametrów, to były by 2 pętle... Proste, przejrzyste i mało klepania w klawisze.
Jak to rozwiązać?
Polecenie PUSH zdaje się nie działać z czymkolwiek innym niż @array co oznacza, że będę musiał mieć 20 liczników dla każdego parametru albo przy obliczaniu, wpierw sprawdzać ile wartości różnych od zera (o ile "Undefined" będzie jako zero odczytane) zawiera dany wiersz tablicy. Jeśli mimo tego da się jakoś użyć PUSH, jak odczytać ilość elementów w tablicy (scalar(@matrix[0]) ?)
Jak zdefiniować taką tablicę? Może ja źle do tego podszedłem? Dodam, że programuję w Perl od dziś... Wcześniej tylko C/C++.

Z góry dzięki za pomoc.