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

Get dir: Datein und Order auslesen

Leser: 1


<< >> 3 Einträge, 1 Seite
Kristop8
 2005-11-10 19:56
#59946 #59946
User since
2005-10-06
22 Artikel
BenutzerIn
[default_avatar]
Hallo Leute,

stehe vor einem großen Problem und zwar will ich für eine HTML -Seite eine Auflistung der Ordner und Dateien innerhalb eines bestimmten Verzeichnisses ausgeben.

Also so eine Art Baumstruktur....

Um die Namen der Ordner und Files zu bekommen habe ich folgendes rekursives Skript gebastelt..
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
sub MakeList {
    $level++;
    my ($TreeDir) = @_;
    
    opendir(TREEDIR, $TreeDir) or die "Error: couldn't open directory '$Directory':$!\n";
    
    foreach my $entry3 (readdir(TREEDIR)) {
        unless ($entry3 =~ m/\.\.?$/) {
            my $i = 0;
            
            #---This prints the directories and subdirectories. The subdirs are indented by tab
            print $level;
            while ($i < $level) {
               
 print "\t";
               
 $i++;
            }
            print "$entry3\n";
            #---End of that printing thing
            
            if (-d "$TreeDir/$entry3"){
               
 my $NextDir = "$TreeDir/$entry3";
               
 print "\nEntering new Folder $NextDir\n";
               
 MakeList($NextDir);
            }
        }
    }
    closedir(TREEDIR);
    $level--;
}


Das Problem ist jetzt das er in die Order des unteren Levels öffters reinspringt und diese dadurch mehrmals ausgibt...

-> Das heißt hat ein Order 3SubOrdner wir er bei jedem Durchlauf neu Aufgeführt...

Hoffe Ihr könnt mir bei dem Problem etwas weiterhelfen.
Besten Dank und
LG Chris

edit pq: code-tags statt quote-tags\n\n

<!--EDIT|pq|1131647915-->
pq
 2005-11-10 20:32
#59947 #59947
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
nimm einen Wiki:lexikalischen filehandle.
habe das skript nur überflogen, aber das sollte dein problem lösen.
ein bareword-filehandle ist nämlich global gültig.
noch einfacher wäre evtl. CPAN:File::Find\n\n

<!--EDIT|pq|1131647757-->
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
pq
 2005-11-10 20:40
#59948 #59948
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Kristop8,10.11.2005, 18:56]
Code: (dl )
1
2
3
4
5
6
            while ($i < $level) {
               
 print "\t";
               
 $i++;
            }
[/quote]
hmm, das sieht aber kompliziert aus.
lesbarer wäre
Code: (dl )
print "\t" x $level;
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
<< >> 3 Einträge, 1 Seite



View all threads created 2005-11-10 19:56.