Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7621[/thread]

datein in verzeichnis durchlaufen (Seite 2)

Leser: 1


<< |< 1 2 >| >> 18 Einträge, 2 Seiten
Crian
 2006-01-16 13:53
#61910 #61910
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[quote=Guest,14.01.2006, 20:03]wollte mal fragen was die beste und einfachste methode ist, wenn ich mit einem script den inhalt aller datein(txt) in einem verzeichnis durchsuchen will.[/quote]
das schreit nach glob...
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
ptk
 2006-01-16 15:35
#61911 #61911
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Besser: File::Glob::bsd_glob
Strat
 2006-01-16 15:52
#61912 #61912
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
glob klingt gut, hat aber scheinbar probleme mit leerzeichen... deshalb bevorzuge ich da den klassischen weg:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
opendir(my $DIR, $pathToFiles) or die "Error: couldn't open dir '$pathToFiles': $!\n";

my @files = map { "$pathToFiles/$_" } # file => path/file
grep { -f "$pathToFiles/$_" and /\.txt$/ } # wenn datei und .txt
readdir($DIR);
closedir($DIR);

foreach my $file (@files) {
print "--------------------\nReading file: '$file'\n";
open (my $FH, "<", $file) or die "Error in reading '$pathToFiles/$file': $!\n";
print <$FH>;
close($FH);
} # foreach

oder so aehnlich, hat eh schon renee geschrieben.

@esskar: da wuerde mich mal ein benchmark bei unterschiedlichen verzeichnisgroessen interessieren; hast du zeit&lust?\n\n

<!--EDIT|Strat|1137419748-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Crian
 2006-01-16 17:35
#61913 #61913
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Leerzeichen haben in Verzeichnissen/Dateinamen nix zu suchen imho ... aber natürlich gibt es sie. Dazu siehe den Post von ptk :)
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
esskar
 2006-01-17 05:11
#61914 #61914
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
man lernt nie aus

Code: (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
#!/usr/bin/perl

use strict;
use warnings;

use Benchmark qw(:all);

my %folders = (
   Temp1 => 10,
   Temp2 => 100,
   Temp3 => 1000,
   Temp4 => 5000,
   Temp5 => 10000,
   # Temp6 => 20000,
);

foreach my $folder (sort keys %folders) {

   print "Folder: $folder, Files: ", $folders{$folder}, "\n";

   timethese(5, {
       'Pq' => sub {
           foreach my $file (glob "$folder/*") {
               my $filename = $file;
               if(-f $filename) {
               #   print STDERR "$filename\n";
               }
           }
       },
       'Strat' => sub {
           opendir(my $DIR, $folder) or die "Error: couldn't open dir '$folder': $!\n";

           my @files = map { "$folder/$_" }         # file => path/file
               grep { -f "$folder/$_" } # wenn datei und .txt
               readdir($DIR);
           closedir($DIR);

           foreach my $file (@files) {
               my $filename = $file;
             #  print STDERR "$filename\n";
           }
       },
       'Esskar' => sub {
           opendir(my $DIR, $folder) or die "Error: couldn't open dir '$folder': $!\n";
           while(my $file = readdir $DIR) {
               my $filename = $folder . '/' . $file;
               if(-f $filename) {
               # print STDERR "$filename\n";
               }
           }
           closedir($DIR);
       },
   });

}


Folder: Temp1, Files: 10
Benchmark: timing 5 iterations of Esskar, Pq, Strat...
   Esskar:  0 wallclock secs ( 0.00 usr +  0.00 sys =  0.00 CPU)
           (warning: too few iterations for a reliable count)
       Pq:  0 wallclock secs ( 0.00 usr +  0.00 sys =  0.00 CPU)
           (warning: too few iterations for a reliable count)
    Strat:  0 wallclock secs ( 0.00 usr +  0.00 sys =  0.00 CPU)
           (warning: too few iterations for a reliable count)
Folder: Temp2, Files: 100
Benchmark: timing 5 iterations of Esskar, Pq, Strat...
   Esskar:  0 wallclock secs ( 0.00 usr +  0.05 sys =  0.05 CPU) @ 108.70/s (n=5)
           (warning: too few iterations for a reliable count)
       Pq:  0 wallclock secs ( 0.00 usr +  0.08 sys =  0.08 CPU) @ 63.29/s (n=5)
           (warning: too few iterations for a reliable count)
    Strat:  0 wallclock secs ( 0.03 usr +  0.00 sys =  0.03 CPU) @ 161.29/s (n=5)
           (warning: too few iterations for a reliable count)
Folder: Temp3, Files: 1000
Benchmark: timing 5 iterations of Esskar, Pq, Strat...
   Esskar:  1 wallclock secs ( 0.19 usr +  0.63 sys =  0.81 CPU) @  6.15/s (n=5)
       Pq:  1 wallclock secs ( 0.41 usr +  1.11 sys =  1.52 CPU) @  3.30/s (n=5)
    Strat:  1 wallclock secs ( 0.16 usr +  0.67 sys =  0.83 CPU) @  6.04/s (n=5)
Folder: Temp4, Files: 5000
Benchmark: timing 5 iterations of Esskar, Pq, Strat...
   Esskar:  9 wallclock secs ( 1.20 usr +  7.86 sys =  9.06 CPU) @  0.55/s (n=5)
       Pq: 19 wallclock secs ( 1.73 usr + 16.59 sys = 18.33 CPU) @  0.27/s (n=5)
    Strat: 10 wallclock secs ( 0.92 usr +  7.91 sys =  8.83 CPU) @  0.57/s (n=5)
Folder: Temp5, Files: 10000
Benchmark: timing 5 iterations of Esskar, Pq, Strat...
   Esskar: 43 wallclock secs ( 3.17 usr + 39.39 sys = 42.56 CPU) @  0.12/s (n=5)
       Pq: 85 wallclock secs ( 6.53 usr + 76.41 sys = 82.94 CPU) @  0.06/s (n=5)
    Strat: 42 wallclock secs ( 3.19 usr + 38.06 sys = 41.25 CPU) @  0.12/s (n=5)


ich hätte gedacht, dass die Strat-Lösung langsamer sein muss als die Esskar-Lösung, da ja bei Strat alle Dateien zweimal durchlaufen werden müssen

PS: Alle Namen sind frei erfunden. :)\n\n

<!--EDIT|esskar|1137512567-->
esskar
 2006-01-17 14:33
#61915 #61915
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=Strat,16.01.2006, 14:52]glob klingt gut, hat aber scheinbar probleme mit leerzeichen... deshalb bevorzuge ich da den klassischen weg:
...
oder so aehnlich, hat eh schon renee geschrieben.[/quote]
könnte man vielleicht noch vereinfachen:

Code: (dl )
my @files = grep { -f $_ } map { "$pathToFiles/$_" } readdir($DIR);
pq
 2006-01-17 17:17
#61916 #61916
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
ähm, wieso steht bei der glob-lösung 'Pq'? da bin doch nicht etwa ich mit gemeint?
ich habe nirgendwo glob() benutzt, und es ging um eine ganz andere aufgabenstellung:
"wie bekomme ich dann nacheinander alle datein im verzeichnis in IN?"
ziemlich genau das macht mein einzeiler.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
esskar
 2006-01-17 17:42
#61917 #61917
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
stimmt... hab mich vertan... werde es berichtigen!
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2006-01-14 21:03.