Archiv verlassen und diese Seite im Standarddesign anzeigen : <STDIN> + Anzahl
Gibt es die Möglichkeit wenn ich Dateien per Pipe (|) übergebe, die Anzahl der Dateien zu bekommen? Also in etwa so
$count = 1;
while(<STDIN>) {
print "File " . $count . "/" . scalar(<STDIN>) . "\n";
$count++;
}
Lg freeze
mnemonic
18.08.2006, 14:32
Wenn jede Datei eine Zeile beansprucht könntest Du das so machen:
#!/usr/bin/perl -w
use strict;
my $c = 0;
while(<STDIN>) {
if(chomp() ne "") {
print("$_ "."- ".++$c."\n"); # Format: "Dateiname - Nummer"
}
}
Am Ende der Schleife hast Du dann in $c die Anzahl an Dateien (Zeilen).
so meinte ich das nicht, ich wollte die gesamtanzahl der dateien haben, bevor er die dateien durchläuft.
Da es um die 125.000 Dateien sind, würde ich das gerne vorher wissen bei welcher datei ich bin....
Datei X von insgesamt Y
so in der art. Nur wie bekomme ich aus <STDIN> die gesamtanzahl der dateien?
Lg freeze
mnemonic
18.08.2006, 15:19
Meines Wissens ist das nicht möglich.
Zu dem Zeitpunkt müsste dann ja schon alles in der Pipe gepuffert sein.
Die einzige Möglichkeit, die ich sehe, wäre das Programm von dem gepiped wird dahingehend zu ändern, dass es als erstes die Anzahl an Dateien rausschreibt.
Habs hinbekommen...
my $count = 0;
my @file_list = <>;
foreach(@file_list) {
$count++;
print "Working on file" . $count . " from " . scalar(@file_list) . "\n";
# .
# .
# DO ANYTHING
# .
# .
}
Lg freeze
mnemonic
18.08.2006, 17:08
Die Methode ist allerdings sehr Ressourcenunfreundlich, da mit Ausführung von
my @file_list = <>;
alle Deiteinamen in einem Rutsch eingelesen werden und somit im Speicher präsent sind.
Ich dachte es ging Dir darum genau das zu vermeiden... :rolleyes:
Naja, Hauptsache es funzt. :cool:
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.