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

testen ob Verzeichnis leer (page 3)

Tags: Similar Threads

Readers: 2


<< |< 1 2 3 4 >| >> 34 entries, 4 pages
coax
 2004-06-06 03:02
#83049 #83049
User since
2003-08-11
457 articles
BenutzerIn
[default_avatar]
cool danke fuer die Erklaerung Dubu :)
,,Das perlt aber heute wieder...'' -- Dittsche
Crian
 2004-06-06 06:30
#83050 #83050
User since
2003-08-04
5867 articles
ModeratorIn
[Homepage]
user image
Man sollte auch Dateien wie '_' berücksichtigen oder leere Disketten, die wirklich nur eine Datei '.' enthalten (?)

Also würde ich mit opendir / readdir alles in ein Array lesen, . und .. rausschmeißen und dann das Array auf == 0 testen. Wenn dieser Vergleich einen wahren Wert liefert, ist das Verzeichnis leer.
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
guest Gast
 2004-06-06 15:50
#83051 #83051
[quote=renee,05.06.2004, 17:48][quote=Dieter,05.06.2004, 14:02]oder so ...
Code: (dl )
1
2
3
4
5
opendir DIR, $dir or die $!;
my $files = grep /\.\w+$/, readdir DIR;
closedir DIR;

$files == 0 && print "Verzeichnis leer!";
[/quote]
Damit forderst Du unbedingt eine File-Extension. Diese ist aber nicht unbedingt notwendig![/quote]
Na gut - dann eben so :)
Code: (dl )
1
2
3
4
5
opendir DIR, $dir or die $!;
my $files = grep /^\w+\.*\w+$/, readdir DIR;
closedir DIR;

$files == 0 && print "Verzeichnis leer!";

damit werden dann dann auch die Fälle ohne Extension erschlagen.
DS
 2004-06-06 17:00
#83052 #83052
User since
2003-08-04
247 articles
BenutzerIn
[default_avatar]
[quote=coax,06.06.2004, 01:02]cool danke fuer die Erklaerung Dubu :)[/quote]
Ich schließe mich an... wieder was gelernt... danke! ;)
Crian
 2004-06-06 20:37
#83053 #83053
User since
2003-08-04
5867 articles
ModeratorIn
[Homepage]
user image
[quote=Dieter,06.06.2004, 13:50]Na gut - dann eben so :)
Code: (dl )
1
2
3
4
5
opendir DIR, $dir or die $!;
my $files = grep /^\w+\.*\w+$/, readdir DIR;
closedir DIR;

$files == 0 && print "Verzeichnis leer!";

damit werden dann dann auch die Fälle ohne Extension erschlagen.[/quote]
Und was ist mit der Datei 'A' und was ist mit der Datei '_'?

Wie ich weiter oben schon beschrieben habe, wird so ein Schuh daraus:

Code: (dl )
1
2
3
4
5
opendir DIR, $dir or die $!;
my @files = grep {$_ ne '.' and $_ ne '..'} readdir DIR;
closedir DIR;

print "Verzeichnis leer!" if @files == 0;


Oder von mir aus auch so, wenns unbedingt eine RE sein soll:

Code: (dl )
1
2
3
4
5
opendir DIR, $dir or die $!;
my @files = grep /^(?!\.$)(?!\.\.$)/, readdir DIR;
closedir DIR;

print "Verzeichnis leer!" if @files == 0;
\n\n

<!--EDIT|Crian|1086540300-->
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
guest Gast
 2004-06-06 20:44
#83054 #83054
[quote=Crian,06.06.2004, 18:37][quote=Dieter,06.06.2004, 13:50]Na gut - dann eben so :)
Code: (dl )
1
2
3
4
5
opendir DIR, $dir or die $!;
my $files = grep /^\w+\.*\w+$/, readdir DIR;
closedir DIR;

$files == 0 && print "Verzeichnis leer!";

damit werden dann dann auch die Fälle ohne Extension erschlagen.[/quote]
Und was ist mit der Datei 'A' und was ist mit der Datei '_'?[/quote]
Hmmm ...
'A' ist alphanumerisch
'_' ist alphanumerisch
'w+' will max. 1 alphanumerisches Zeichen
also sollte alles reinkommen - oder täusche ich mich?
Crian
 2004-06-06 20:48
#83055 #83055
User since
2003-08-04
5867 articles
ModeratorIn
[Homepage]
user image
Du täuscht Dich. Du hast zwei \w+, also muss die Datei mindestens zwei Zeichen lang sein. Außerdem fällt auch die Datei '.ichgeheleiderverloren' durch.

Merke: Man sollte das, was man ausdrücken möchte, so direkt wie möglich tun (nämlich "alles außer '.' und '..'") und nicht irgendwelche komplizierten Ausdrücke formulieren, die hoffentlich genau dies leisten.\n\n

<!--EDIT|Crian|1086540988-->
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
guest Gast
 2004-06-06 21:48
#83056 #83056
[quote=Crian,06.06.2004, 18:48]Du täuscht Dich. Du hast zwei \w+, also muss die Datei mindestens zwei Zeichen lang sein. Außerdem fällt auch die Datei '.ichgeheleiderverloren' durch.

Merke: Man sollte das, was man ausdrücken möchte, so direkt wie möglich tun (nämlich "alles außer '.' und '..'") und nicht irgendwelche komplizierten Ausdrücke formulieren, die hoffentlich genau dies leisten.[/quote]
Naja den . wollteste ja schließlich auch haben ;)
und so geht's dann unter Berücksichtigung von 'Merke':
my $files = grep /^\W*\w+\.*\w*$/, readdir DIR;

Eine Möglichkeit das alles ohne Anwerfen der Regex-Maschine zu lösen ist natürlich auch:
Code: (dl )
1
2
3
4
5
6
opendir DIR, $dir or die $!;
read DIR for 0 .. 1;
my $files = scalar readdir DIR;
closedir DIR;

$files == 0 && print "Verzeichnis leer!";
Crian
 2004-06-06 22:07
#83057 #83057
User since
2003-08-04
5867 articles
ModeratorIn
[Homepage]
user image
Nein, '.' und '..' darf im Verzeichnis sein, muss aber nicht. Ich weiß nicht was gegen meine Lösung von oben sprechen soll:

Code: (dl )
1
2
3
4
5
opendir DIR, $dir or die $!;
my @files = grep {$_ ne '.' and $_ ne '..'} readdir DIR;
closedir DIR;

print "Verzeichnis leer!" if @files == 0;


Das tut ganz klar das was ich möchte. Und ich muss mich nicht auf irgendwelche Eventualitäten verlassen (etwa: Ist sichergestellt, dass readdir immer zuerst . und .. zurückgibt? Ist sichergestellt, dass immer . und .. vorhanden sind (auch auf einer Diskette im Dosformat, oder könnte da vielleicht nur '.' und eine weitere Datei vorhanden sein, und Dein Code erzählt Dir, die Diskette sei leer))?\n\n

<!--EDIT|Crian|1086545335-->
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
guest Gast
 2004-06-06 22:32
#83058 #83058
Da war keine Lösung - jedenfalls kein Code ..
und . bzw .. hast Du 'immer'.
Ein grep per regex oder so wie Du das gerade formuliert hast wird sicher funktionieren.
Aber greppen (und u.U. swappen) muß nicht sein wenn es speicherschonender auch anders geht.

Gerade fällt mir dabei ein:
um festzustellen ob ein Verzeichnis leer ist, reicht es völlig aus die ersten drei Einträge auf Vorhandensein zu prüfen.
Ich denke das wird wohl der effizienteste Weg sein.
<< |< 1 2 3 4 >| >> 34 entries, 4 pages



View all threads created 2004-06-05 12:03.