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
#!/usr/bin/perl use 5.010; use strict; use warnings; use Data::Dumper; my %telefonate=(); #StudioNummern importieren open (NUMMERN, '<', "StudioNummern.txt") or die $!; my @snr=<NUMMERN>; chomp @snr; close (NUMMERN); #Daten aus .csv-Datei importieren foreach my $snr (@snr){ my $count=1; #Telefonate werden gezählt open (STUD, '<', 'input/FRITZ!Box_Anrufliste_'.$snr.'.csv') or print 'Datei fuer Studio '.$snr.' nicht vorhanden!'."\n"; while (my $line = <STUD>){ chomp($line); my @wert=split';',$line; $telefonate{'Studio_'.$snr.'_Telefonat_Nr'.$count}{StudioNr}=$snr; $telefonate{'Studio_'.$snr.'_Telefonat_Nr'.$count}{typ}=$wert[0]; $telefonate{'Studio_'.$snr.'_Telefonat_Nr'.$count}{datum_und_uhrzeit}=$wert[1]; $telefonate{'Studio_'.$snr.'_Telefonat_Nr'.$count}{name}=$wert[2]; $telefonate{'Studio_'.$snr.'_Telefonat_Nr'.$count}{rufnummer}=$wert[3]; $telefonate{'Studio_'.$snr.'_Telefonat_Nr'.$count}{nebenstelle}=$wert[4]; $telefonate{'Studio_'.$snr.'_Telefonat_Nr'.$count}{eigene_rufnummer}=$wert[5]; $telefonate{'Studio_'.$snr.'_Telefonat_Nr'.$count}{dauer}=$wert[6]; $count++; } close (STUD); } #Auswertungs-Datei erstellen open (TXT,'>','output/Auswertung'.'.txt') or die $!; print (TXT Dumper(\%telefonate)."\n"); close (TXT);
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
# zum Summe Bilden use List::Util qw( sum ); ... my %summe; # in der Schleife zum Einlesen ... # Zaehle Anrufe pro Tag und Uhrzeit $summe{$datum}{$uhrzeit}++; ... Nach der Schleife # Gebe Summe pro Tag und Zeiten aus for my $datum ( keys %summe ) { my $tagessumme = sum( values %{$summe{$datum}} ); print "$datum:\n", "Total: $tagessumme\n"; print "$uhrzeit: $summe{$datum}{$uhrzeit}\n" for my $uhrzeit ( keys %{$summe{$datum}} ); print "\n"; }
QuoteNun soll ich eine Abfrage/Ausgabe erstellen, die mir angibt, an welchem Datum wie viele Telefonate insgesamt und wie viele um welche Uhrzeit geführt wurden.
QuoteCode (perl): (dl )1 2 3 4open (NUMMERN, '<', "StudioNummern.txt") or die $!; my @snr=<NUMMERN>; chomp @snr; close (NUMMERN);
1 2 3 4
open(my $fhNummern, '<', "StudioNummern.txt") or die $!; my @snr=<$fhNummern>; chomp @snr; close ($fhNummern);
1 2 3 4 5
my @snr = do { open(my $fh, '<', "StudioNummern.txt") or die $!; <$fh> }; chomp @snr;
2017-03-15T06:49:50 RaubtierDas close kann man sich sparen, wenn das lexikalische Dateihandle innerhalb eines Blocks geöffnet wurde (Datei geht bei } automatisch zu). Daher findet man gerne "do" bei sowas (nur um den Block zu haben):
Code (perl): (dl )1 2 3 4 5my @snr = do { open(my $fh, '<', "StudioNummern.txt") or die $!; <$fh> }; chomp @snr;
2017-03-16T12:34:18 RaubtierAnsichtssache. Ich bin über jeden gesparten Befehl froh. Was bringt mir das close für einen Vorteil?
...
Warum soll ich eine Datei schließen, wenn das eh automatisch passiert
2017-03-16T15:44:55 hlubenow[...]
Das ist wohl eine Erziehungsfrage. Wenn man eine Tür aufmacht, muß man sie auch wieder zumachen.
2017-03-17T07:59:26 RaubtierOk, dann vielleicht in aller Deutlichkeit nochmal: Mein Haupttipp war, keine globalen Dateihandles zu verwenden, sondern lexikalische. Also bei Dateihandles, genau wie bei Variablen, my $fh zu nehmen statt FH. Ich hoffe, diesem Tipp wirst zu zustimmen.
2017-03-17T07:59:26 RaubtierOk, dann vielleicht in aller Deutlichkeit nochmal: Mein Haupttipp war, keine globalen Dateihandles zu verwenden, sondern lexikalische. Also bei Dateihandles, genau wie bei Variablen, my $fh zu nehmen statt FH. Ich hoffe, diesem Tipp wirst zu zustimmen.