close LOGFILE2;
my @fullTable = <LOGFILE2>;
1 2
# lese alle Zeilen aus Handle in Array (ueberschreibend) my @fullTable = <LOGFILE2>;
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
##-------------Verzeichnisse holen
opendir(LOGFILE,"*****") or die "Cant open File Directory\n";
@dir=readdir(LOGFILE);
close LOGFILE;
shift @dir;
shift @dir;
##------------Datei öffnen
print "Open Dirs \n";
print "-------\n";
for $i1(0..$#dir)
{
open(LOGFILE2,"<*****") or die "cant open txt \n";
$file = LOGFILE2;
print $dir[$i1];print "\n";
parseData();
##------------Test
if (exists $outputTable{"4"}) {
$outputTable{"3"}=$outputTable{"3"}+$outputTable{"4"};
delete $outputTable{"4"};
}
##------------Ausgabe in String
while (my($Name,$Wert)=each%outputTable)
{print "Tag: ";print"$Name, $Wert\n";
$text = $text.$Wert." ";
}
$text = $text.$dir[$i1]."\n";
print "--------------------------\n";
%outputTable =();
close LOGFILE2;
}
#Daten schreiben
open (TXT, ">C:/Temp/archiv4/Daten.txt") or Win32::MsgBox("Die Ausgabedatei konnte nicht erzeugt werden: $!\n");
print TXT $text;
close TXT;
1
2
3
4
5
6
7
8
9
10
11
12
13
#sub to extract the needed Data and made math functions
sub parseData{
print "Report: parsing $file\n";
#read file
my $line; my @fullTable;
for $line (<LOGFILE2>)
{
push(@fullTable,$line);
}
#finde Positionen von **** and **** durch erste Zeile
print "zZz\n";
}
for $line (<LOGFILE2>)
"zZz\n";
pq hat Dir doch schon was dazu geschrieben
Quote@ Linuxer: Dachte @fullTable wird durch dem Aufruf der Funktion parseData da mit my deklariert bei jeden Auruf wieder gelehrt?
2013-01-10T15:22:57 Oliver007Die Funktion parseData
Code: (dl )1
2
3
4
5
6
7
8
9
10
11
12
13#sub to extract the needed Data and made math functions
sub parseData{
print "Report: parsing $file\n";
#read file
my $line; my @fullTable;
for $line (<LOGFILE2>)
{
push(@fullTable,$line);
}
#finde Positionen von **** and **** durch erste Zeile
print "zZz\n";
}
Das Zeit Laqg entsteht in der Funktion parseData. An der Stelle beibis printCode: (dl )for $line (<LOGFILE2>)Code: (dl )"zZz\n";
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
#! /usr/bin/perl use strict; use warnings; use Time::HiRes qw( gettimeofday tv_interval ); my $i=0; for my $file ( glob("data.*") ) { open FH, $file or die "$file: $!\n"; parsedata(++$i); close FH; } sub parsedata { my $run = shift; my $line; my @lines; my $t0 = [ gettimeofday ]; for $line ( <FH> ) { push @lines, $line; } my $t1 = [ gettimeofday ]; print "$run Run: ", tv_interval( $t0, $t1 ), "\n"; } __END__
1
2
3
4
5
6
1 Run: 0.573292
2 Run: 0.4999
3 Run: 0.49994
4 Run: 0.499677
5 Run: 0.499855
6 Run: 0.499921
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
sub parsedata { my $run = shift; my @lines; my $t0 = [ gettimeofday ]; # echtes zeilenweise lesen push @lines, $_ while <FH>; my $t1 = [ gettimeofday ]; print "$run Run: ", tv_interval( $t0, $t1 ), "\n"; }
1
2
3
4
5
6
1 Run: 0.38726
2 Run: 0.344076
3 Run: 0.343493
4 Run: 0.343464
5 Run: 0.343567
6 Run: 0.343638
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
#!/usr/bin/perl use strict; use warnings; my $workdir='*****'; my $workfile='*****'; my $outfile='C:\Temp\archiv4\Daten.txt'; ##-------------Verzeichnisse holen my @dir; { opendir(my $dh , $workdir) or die "Cant open DIR: $workdir ($!)\n"; my @dir=grep{!/^\.\.?$/}readdir($dh); close $dh; } my $text=''; print "Open Dirs \n"; print "-------\n"; for my $dir (@dir) { print $dir."\n"; # ist das so geplant ??? my $path=join('\\',$workdir,$dir,$workfile); ##------------Datei öffnen print "Report: parsing $path\n"; my %outputTable = parseData($path); ##------------Test if (exists $outputTable{"4"}) { $outputTable{"3"}=$outputTable{"3"}+$outputTable{"4"}; delete $outputTable{"4"}; } ##------------Ausgabe in String while ( my ($Name,$Wert) = each( %outputTable) ) { print "Tag: $Name, $Wert\n"; $text .= "$Wert\t"; } $text .= $dir."\n"; print "--------------------------\n"; } #Daten schreiben open (my $fh, ">" $outfile) or Win32::MsgBox("Die Ausgabedatei $outfile konnte nicht erzeugt werden: $!\n"); print $fh $text; close $fh; sub parseData { my $path=shift(@_); my %Table; open(my $fh, '<', $path) or die "can't open $path ($!)\n"; my @fullTable=<$fh>; close($fh); ##finde Positionen von **** and **** durch erste Zeile # füllen von %Table aus @fullTable ??? # zeige mal genauer was hier passiert. # möglicherweise lässt sich das effizienter gestalten. return %Table; }