Schrift
[thread]7320[/thread]

Namen von Verzeichnissen auslesen (Seite 2)

Leser: 4


<< |< 1 2 >| >> 18 Einträge, 2 Seiten
vayu
 2005-10-07 15:52
#58559 #58559
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
hab mir son ls auch mal selber gebastelt ... ist schon n bissl tricky :)
Kristop8
 2005-10-07 17:47
#58560 #58560
User since
2005-10-06
22 Artikel
BenutzerIn
[default_avatar]
Hallo Zusammen, erstmal danke für euren input,

habe jetzt folgendes Skript gebastelt:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
 use File::Find;
$dir = "c:/test";
find(\&edits, $dir);
$seen = 0;
sub edits() {
             $seen=$seen+1;
                 if (-d) {
                  $ordner = $File::Find::name;
                        push(@ORDNER, $ordner);
                        print @ORDNER;
                        print "\n";
                         } #end if
            } #end sub


es läuft zwar aber der output ist mir etwas suspekt.
und zwar bei der folgenden Verzeichnisstruktur:
c:\test\test1, c:\test\test2
ist der output(bei obigem Programcode) der folgene:
c:\test
c:\test\test1
c:\test\test1c:\test\test2

woran liegt das das bei der letzen zeile sowohl test1 wie auch test2 ausgegeben wird und wie kann man das umgehen?

Danke schon mal,

Gruß Chris

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

<!--EDIT|pq|1128695673-->
sesth
 2005-10-07 18:19
#58561 #58561
User since
2005-02-01
181 Artikel
BenutzerIn
[default_avatar]
Zunächst solltest Du mal mit "use strict" arbeiten und die Variablen deklarieren - das hilft, Fehler zu vermeiden. Ich hab den Code mal etwas angepasst:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
use File::Find;
use strict;

my @ORDNER;
my $dir = "c:/test";
my $seen = 0;
find(\&edits, $dir);
print join("$/", @ORDNER);
sub edits() {
             $seen=$seen+1;
               
  if (-d) {
               
   my $ordner = $File::Find::name;
               
         push(@ORDNER, $ordner);
               
          } #end if
            } #end sub

Der Aufruf Deiner Funktion erfolgt innerhalb von find. Deshalb macht das Initialisieren von $seen auf 0 nur vor dem Aufruf Sinn. Der print-Befehl gibt das gesamte Array aus. Deshalb wurde bei Dir immer alles hintereinander ausgegeben.\n\n

<!--EDIT|sesth|1128695255-->
Gruß
Thomas
renee
 2005-10-07 20:36
#58562 #58562
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
kürzer:
Code: (dl )
push(@ORDNER, $File::Find::name) if(-d);
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Strat
 2005-10-07 22:00
#58563 #58563
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
da sollte man vielleicht noch die beiden verzeichnisse . und .. ausnehmen...
Code: (dl )
push (@ORDNER, $File::Find::name) if -d and $_ !~ /^\.\.?$/;
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
J-jayz-Z
 2005-10-08 00:23
#58564 #58564
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Du sagst es, da flieg ich auch immer drauf rein ^^
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
renee
 2005-10-08 12:43
#58565 #58565
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=Kristop8,07.10.2005, 15:47][...]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
 use File::Find;
$dir = "c:/test";
find(\&edits, $dir);
$seen = 0;
sub edits() {
             $seen=$seen+1;
                 if (-d) {
                     $ordner = $File::Find::name;
                        push(@ORDNER, $ordner);
                        print @ORDNER;
                        print "\n";
                         } #end if
            } #end sub


es läuft zwar aber der output ist mir etwas suspekt.
und zwar bei der folgenden Verzeichnisstruktur:
c:\test\test1, c:\test\test2
ist der output(bei obigem Programcode) der folgene:
c:\test
c:\test\test1
c:\test\test1c:\test\test2

woran liegt das das bei der letzen zeile sowohl test1 wie auch test2 ausgegeben wird und wie kann man das umgehen?
[...][/quote]
Du gibst ja den Inhalt des kompletten Arrays aus. Und c:\test\test1 ist ja auch nach hinzufügen von c:\test\test2 noch im Array. Deswegen wird beides ausgegeben...

Warum es direkt aneinendergeklatscht wird?
Das liegt an der Art *wie* Du das Array ausgibst...

Teste mal den Unterschied zwischen:
Code: (dl )
1
2
3
4
5
print @array;
# und
print "@array";
# und
print $_," --> " for(@array);
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pKai
 2005-10-10 16:29
#58566 #58566
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
Oder auch
Code: (dl )
1
2
3
4
5
6
{
local $" = ' --> ';
print "@array";
}

print join ' --> ' => @array;

insbesondere, wenn ich am Ende keinen "Trenner" brauchen kann, wie es renees letzte Variante (for) erzeugt.
I sense a soul in search of answers.
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2005-10-06 17:12.