Leser: 24
1
2
3
4
5
6
7
8
32161 28.0 31.0 38.0 36.0 37.0 4245 1.12 1.9
32164 27.0 31.0 38.0 36.0 37.0 4245 1.12 1.9
32167 27.0 31.0 38.0 36.0 37.0 4219 1.12 1.9
32170 27.0 31.0 38.0 36.0 37.0 4219 1.12 1.9
32173 27.0 31.0 38.0 36.0 37.0 4219 1.12 1.9
32176 27.0 31.0 38.0 36.0 37.0 4219 1.12 1.9
32179 27.0 32.0 38.0 36.0 39.0 4245 1.12 1.9
32182 27.0 32.0 38.0 36.0 37.0 4245 1.12 1.9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if($spalte == 4 && ($zeile =~ m/\d+\t[\d.]*\t[\d.]*\t[\d.]*/xs) )
{
$zahl4+=$3;
}
if($spalte == 5 && ($zeile =~ m/\d+\t[\d.]*\t[\d.]*\t[\d.]*\t[\d.]*/xs) )
{
$zahl5+=$4;
}
if($spalte == 6 && ($zeile =~ m/\d+\t[\d.]*\t[\d.]*\t[\d.]*\t[\d.]*\t[\d.]*/xs) )
{
$zahl6+=$5;
}
.
.
.
.
@spalten = split (/\t/,$zeile);
2010-12-08T17:14:16 GwenDragonWenn du erklären würdest, nach welchem Schema die Spalten addiert werden müssen, könnten wir besser helfen.
Was soll denn $3 und die anderen $... darstellen?
Erkläre das bitte genauer?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
#!/usr/bin/perl use strict; use warnings; my %summen = (); while (my $zeile = <DATA>) { chomp($zeile); my @spalten = split (/\t/,$zeile); $summen{$_+1} += $spalten[$_] for 0..$#spalten; } print "Summen:\n"; print "$_: $summen{$_}\n" for sort keys %summen; 1; __DATA__ 1234 1 3 4 99.3 8 9.22 234 1 3 4 99.3 8 9.22 34 1 3 4 99.3 8 9.22 4 1 3 4 99.3 8 9.22 4 1 3 4 99.3 8 9.22
my @werte=$zeile=~/(\d+)\t([\d.]*)\t([\d.]*)\t([\d.]*)\t([\d.]*)\t([\d.]*)\t(\d*)\t([\d.]*)\t([\d.]*)/;
2010-12-08T17:17:45 topegÜbrigens funktioniert dein Code nicht, da in "$<Zahl>" der Wert aus einer "(...)" im regulären Ausdruck enthält. Ohne Klammern kann auch nichts in den Variablen stehen.
2010-12-08T17:31:36 topegWas für "Logging"?
2010-12-08T17:44:34 topegAuf den beziehe ich mich auch. Da taucht nirgends ein ein Match "( )" auf.
my @werte=$zeile=~/(\d+)\t([\d.]*)\t([\d.]*)/
@werte=(zahl1,$zahl2,$zahl3)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
#! /usr/bin/perl # vim:ts=4 sw=4 sts=4 et nu fdc=3: use strict; use warnings; my $spalte = 3; #> Variante der Einzelverarbeitung my $summe; my $schwelle = 31.0; my $zuviele = 0; my $position = tell(DATA); # fuer demo zwecke, weil wir aus DATA Sektion lesen while ( my $zeile = <DATA> ) { chomp $zeile; # hoffentlich keine Whitespaces in den Daten... my @spalten = split m{\s+}, $zeile; # verarbeite nur gewuenschte Spalte $summe += $spalten[$spalte-1]; # zaehle, wie oft $spalte die $schwelle ueberschritten hat $zuviele++ if $spalten[$spalte-1] > $schwelle; } print "Die Summe der Spalte $spalte beträgt: $summe\n"; print "Dabei waren $zuviele Werte größer als $schwelle\n"; #> Variante der Sammelverabeitung print "-------8<---------\n"; seek(DATA,$position,0); # fuer demo zwecke, weil wir aus DATA Sektion lesen; Handle-Position zuruecksetzen my %summe; my %zuviele; my %schwelle = ( # Spalten-Nr => Schwellwert 1 => 35000, 2 => 30.0, 3 => 31.0, # ... ); while ( my $zeile = <DATA> ) { chomp $zeile; # hoffentlich keine Whitespaces in den Daten... my @spalten = split m{\s+}, $zeile; # verarbeite alle Spalten; Array-Index beginnt bei 0, # daher wird $idx+1 als Hash-Key genutzt, um wieder als Spaltenangabe zu dienen for my $idx ( 0 .. $#spalten ) { # Summe pro Spalte $summe{$idx+1} += $spalten[$idx]; # zaehle Schwellwertueberschreitungen pro Spalte $zuviele{$idx+1}++ if exists $schwelle{$idx+1} && $spalten[$idx] > $schwelle{$idx+1}; } } # alles ausgeben #for my $spalte ( sort keys %summe ) { # print "Die Summe der Spalte $spalte beträgt: $summe{$spalte}\n"; # if ( exists $schwelle{$spalte} && exists $zuviele{$spalte} ) { # print "Dabei waren $zuviele{$spalte} Werte größer als $schwelle{$spalte}\n"; # } #} # nur gewünschte Spalte ausgeben print "Die Summe der Spalte $spalte beträgt: $summe{$spalte}\n"; if ( exists $schwelle{$spalte} && exists $zuviele{$spalte} ) { print "Dabei waren $zuviele{$spalte} Werte größer als $schwelle{$spalte}\n"; } __DATA__ 32161 28.0 31.0 38.0 36.0 37.0 4245 1.12 1.9 32164 27.0 31.0 38.0 36.0 37.0 4245 1.12 1.9 32167 27.0 31.0 38.0 36.0 37.0 4219 1.12 1.9 32170 27.0 31.0 38.0 36.0 37.0 4219 1.12 1.9 32173 27.0 31.0 38.0 36.0 37.0 4219 1.12 1.9 32176 27.0 31.0 38.0 36.0 37.0 4219 1.12 1.9 32179 27.0 32.0 38.0 36.0 39.0 4245 1.12 1.9 32182 27.0 32.0 38.0 36.0 37.0 4245 1.12 1.9