Schrift
[thread]7320[/thread]

Namen von Verzeichnissen auslesen

Leser: 4


<< |< 1 2 >| >> 18 Einträge, 2 Seiten
Gast Gast
 2005-10-06 17:12
#58549 #58549
Hallo Zusammen,

Hab zwar schon paar Perl Anfängerkurse durchgearbeiten, aber noch keine Lösung für mein Problem gefungen.

Folgendens:

ich will in aus einem bestimmten Verzeichnis (c:\input) die namen aller suborder und datein filtern und in 2 verschiedenen arrays abspeichern. (ein array für die Ordenr und ein für die Datein)

mit folgendem code bekomme ich zwar alle enthaltenen elemente von c:\input, aber das mit dem filtern klappt nicht.

opendir(PFAD, "c:\\input")
@inhalt=readdir(PFAD);
closedir(PFAD)

foreach $element (@inhalt) {
print "$element\n";
}

Hoffe Ihr könnt mir da weiterhelfen.

Besten Dank,
LG Chris
renee
 2005-10-06 17:15
#58550 #58550
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
my (@dirs,@files);
opendir(PFAD, "c:\\input")
while(my $entry = readdir(DIR)){
push(@dirs,$entry) if(-d $entry);
push(@files,$entry) if(-f $entry);
}
closedir(PFAD);


siehe perldoc -f -X

Es sieht ganz so aus, als würdest Du kein Wiki:strict benutzen. Du solltest Dir den Artikel mal genau durchlesen...
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/
Kristop8
 2005-10-06 18:20
#58551 #58551
User since
2005-10-06
22 Artikel
BenutzerIn
[default_avatar]
Hi Rene,

erstmal danke aber irgendwie schein da ein wurm im skript zu sein funz. nämlich nicht. Meckert syntax fehler in der while schliefe.

Hier nochmal der ganze code:
use strict;
my (@dirs,@files);
my $entry;
my $file;
opendir(PFAD, "c:\\perl")
while(my $entry = readdir(PFAD))
{
push(@dirs,$entry) if(-d $entry);
push(@files,$entry) if(-f $entry);
}
closedir(PFAD);

foreach $file (@files)
{
print "$file ";
}
Quote
Quote
Gast Gast
 2005-10-06 18:25
#58552 #58552
Code-Tags! Außerdem fehlt da ein ";"
Strat
 2005-10-06 18:31
#58553 #58553
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
1. warum machst du bei opendir keine fehlerabfrage? oder ist es nicht tragisch, wenn da keine Dateien drinnen sind?
Code: (dl )
1
2
3
4
5
6
my $dir = "c:/input";
opendir(DIR, $dir) or die "Error: couldn't open dir '$dir': $!\n";
# oder
unless (opendir(DIR, $dir)) {
die "Error: couldn't open dir '$dir': $!\n";
}


2. lass dir mal den Wert $entry ausgeben, dann findest du heraus, dass $entry der Dateiname ohne Pfad ist. -d $entry versucht also nachzuschauen, ob $entry im aktuellen verzeichnis ein verzeichnis ist. da musst du noch $dir mitgeben, z.B.
Code: (dl )
if -d "$dir/$entry"
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Kristop8
 2005-10-06 19:26
#58554 #58554
User since
2005-10-06
22 Artikel
BenutzerIn
[default_avatar]
cool danke,

hat funz.:D
Kristop8
 2005-10-06 19:41
#58555 #58555
User since
2005-10-06
22 Artikel
BenutzerIn
[default_avatar]
habe mit meinem eigenen script etas rumgespielt und dabei ist mir aufgefallen, dass man immer zwar die directories bekommt.
Was macht man aber wenn es SUB-Ordner gibt, wie kriege ich raus od ein Ordner ein Unterorder hat und wenn ja wie kann kriege ich dessen name.

Natürlich kann ich auch die einzellnen order mit hilfe von while schleifen durchsuchen, gibt es aber keine bessere mölichkeit??

Schon mal besten Dank,

LG Chris
Strat
 2005-10-06 20:04
#58556 #58556
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
du meinst, verzeichnisse rekursiv durchsuchen? schau dir mal das Modul File::Find an (oder auch meistens komfortabler, aber halt nicht standard: File::Find::Rule oder so...)
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
sesth
 2005-10-07 12:35
#58557 #58557
User since
2005-02-01
181 Artikel
BenutzerIn
[default_avatar]
So geht es z.B. rekursiv:
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
my @files;

sub findFiles($)
{
    my ($dir) = @_;
    
    my $dirhandle;
    opendir($dirhandle, $dir) || die "can't opendir $dir: $!";
    foreach my $entry (readdir($dirhandle)) {
        if ($entry !~ m{^\.\.?$}) {
            my $absentry = $dir . '/' . $entry;
            if (-f $absentry) {
               
 push @files, $absentry;
            } elsif(-d $absentry) {
               
 findFiles($absentry);
            }
        }
    }
    closedir($dirhandle);
}
Gruß
Thomas
renee
 2005-10-07 13:48
#58558 #58558
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
mit CPAN:File::Find geht es einfacher und man läuft nicht so schnell Gefahr Fehler zu machen (was bei Rekursion sehr schnell geht)...
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/
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



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