Thread Erweiterung einer Funktion zum Zählen von Dateien (5 answers)
Opened by jan99 at 2014-11-19 15:53

jan99
 2014-11-19 15:53
#178454 #178454
User since
2008-09-18
439 Artikel
BenutzerIn
[default_avatar]
Moin !

leider finde ich das Posting was die Basis für diesen Code nicht wieder....

Code (perl): (dl )
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
89
90
91
92
93
94
95
96
#!/usr/bin/perl
# 
# ToDo
# Ausgabe im Wiki-Format für die Dokumenation

use strict;
use warnings;
use 5.010;

use Cwd;
use File::Spec;
use Getopt::Long;
use File::Find::Rule;

$| = 1;

my $PROGNAME = ( split m|[\\/]|, $0 )[-1];

help() if !@ARGV;

my ( @filemask, @dir );
my ( $wiki_output, $help, $from, $to);
GetOptions(
    "f|file=s" => \@filemask,         # filemasks to select several files (DEFAULT: all files)
    "d|dir=s"  => \@dir,              # dirs for scan (DEFAULT: current dir)
    "wiki" =>     \$wiki_output,      # report in wiki-format (DEFAULT: off)
    "from=i" =>   \$from,             # zoom level FROM (or min)
    "to=i" =>     \$to,               # zoom level TO (or max)
    "h|help" =>   \$help              # show help
) or die "Error in command line arguments\n";

### set defaults of parameters if not already set
push @dir, Cwd::cwd()
  if not @dir;              # use current dir, if no parameter --dir defined
  $wiki_output     //= 0;

help() if $help;


if (not @filemask) {
    say "!!!! ##ERROR## !!!! filemask must not be empty!\n";
    help();
}

for my $i ($from .. $to) {
  #### search files
  print "Zoomstufe ".$i."\n";
  my $rule = File::Find::Rule->new();
  # count of files to have action
  my $total_count = 0;
  $rule->name(@filemask);   # set filemasks for search
  $rule->exec(              # this sub is called for each matched file of search
    sub {
      #my ( $shortfn, $dir.$i."\\", $filename ) = @_;
          my ( $shortfn, $dir, $filename ) = @_;
          $dir .= $i."\\";
      $filename = File::Spec->rel2abs($filename);
      $total_count++;
    }
  );
  print "zaehle .....\r";
  $rule->in(@dir);                        #start search in dirs now
  print "total files: ".$total_count."\r";
  print "\n";
}#end-for




exit;

# -----------------------------------------------------------------------------


# ------------------------------------

sub help {
    print <<"HELP";
Usage:
   $PROGNAME --file=FILEMASK --dir=DIR1
   
Parameters:
   --dir           Selected directory
   --file          Filemask for selecting several files
   --wiki          Output in Wiki-Table-Format
   --help          This help
   
Example:

   $PROGNAME --file=a.[12]* -d=X:\\TEST
        
HELP
    exit 4711;
}

__END__


Ich habe dort eine Schleife eingebaut um nummerische Verzeichnisse (beschreiben Zoomstufen für eine Karte) auswerten zu können. Das ist die Schleife mit dem Codeauszug
Code (perl): (dl )
for my $i ($from .. $to) {


Dann habe ich mir überlegt das ich die Nummer noch an das Basis-Auswertungsverzeichnis anhängen muss und die Zeile
Code (perl): (dl )
$dir .= $i."\\";


ergänzt. Aber das lief überhaupt nicht.

Es wird die erste Zoomstufe gestartet und dann zählt er sich wohl einen Ast ab. Ich vermute, das das Problem bei der Übergabe der Parameter liegt. Aber erklären kann ich es mir auch nicht.

Auch der Versuch über
Code (perl): (dl )
my ( $shortfn, $dir.$i."\\", $filename ) = @_;

hat nicht gefruchtet.

Kann mir einer weiterhelfen von Euch?

Gruß Jan :-)
perl-Greenhorn - Win7 64bit / strawberry (ehem. activeperl) - www.OpenStreetMap.de

View full thread Erweiterung einer Funktion zum Zählen von Dateien