Thread Interne Schleifendurchlaufszähler? (12 answers)
Opened by marky at 2011-10-09 09:56

topeg
 2011-10-09 22:14
#152976 #152976
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Dem Code mangelt es an Fehlermeldungen, und modern ist er auch nicht.
Es ist nicht schwer das zu ergänzen und dann sieht der Code auch besser aus.

Ich habe $i mal $file_count genannt. Damit kann man den Wert außerhalb der Schleife Definieren. Auch den Verzeichnisname habe ich in eine Variable genommen.
Ich stehe auf dem Standpunkt das jeder Wert der mehr als einmal im Code auftaucht in eine Variable gehört. Gerade Verzeichnisnamen ändern sich mal schnell. Das dann im Code zu ändern artet womöglich in Arbeit aus.

Ich weiß nicht warum du Unbedingt die letzten 6 eingelesenen Dateien mit der Endung ".od" brauchst. Wenn es dir darum geht bei alphabetischer Reihenfolge der Namen die letzten sechs zu bekommen, so ist der Code nicht sehr zuverlässig. Kein Dateisystem ist gezwungen die Daten in alphabetischer Reihenfolge auszugeben. Manche Treiber liefern die Daten in der Reihenfolge aus in der sie angelegt wurden. Oder in Reihenfolge in der sie zuletzt Modifiziert wurden. Es ist nur "Freundlichkeit" das es gerade Alphabetisch ist. Aus dem Grund würde ich nicht revrese benutzen sondern sort

Es ist auch nicht möglich zu verhindern, dass das gesamte Verzeichnis eingelesen wird. Es ist bis zur letzten Datei nicht klar ob noch eine Datei mit der Endung ".od" kommt.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
my $dir="PFAD/logs/";
my $file_count=6;

#...

opendir ( my $dh , $dir ) or die("ERROR: Can't open $dir ($!)");
for my $sfile ( (sort {$b cmp $a}( grep {/\.od$/} readdir($dh) ))[0..$file_count-1] ){

        if(open(my $fh, '<', $dir.$sfile)){
                while ( my @t = split(/\|/,<$fh>,3) ){
                        $DATA{$t[0]} += $t[1];
                }
                close($fh);
        } else {
                warn("WARNING: Can't open $dir$sfile ($!)");
        }
}
close($dh);

Last edited: 2011-10-09 22:30:06 +0200 (CEST)

View full thread Interne Schleifendurchlaufszähler?