Schrift
[thread]9154[/thread]

Dateien in einem Verzeichnis auslesen: Problem dabei



<< |< 1 2 >| >> 18 Einträge, 2 Seiten
Pandurx
 2007-07-04 17:24
#78182 #78182
User since
2007-06-25
6 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,
ich hab mal wieder ein Problem :(
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
# $home wurde eingegeben als verzeichnis, das die dateien enthält
opendir (DIR,$home);
my @files = readdir(DIR);

closedir(DIR);
# Ausgabe der Dateinamen

print "\n Im Home-Verzeichnis befinden sich die Dateien :\n";
foreach(@files)
{
print "$_\n";
}


Sodelle, das ganze funktioniert recht gut nur zeigt mir die Ausgabe :
Quote

Im Home-Verzeichnis befinden sich die Dateien :
.
..
datei1
datei2

Im Home-Ordner sind allerdings nur "datei1" und "datei2"
Diese Punkte vernichten meinen nächsten Schritt (das kopieren der dateien), da die Datei "." und ".." gar nicht existieren und er beim kopiervorgang dann ne fehlermeldung bringt.

Wie bekomme ich die punkte weg?
bo
 2007-07-04 17:27
#78183 #78183
User since
2006-05-09
76 Artikel
BenutzerIn
[default_avatar]
Code (perl): (dl )
1
2
3
4
opendir my $dir, $home or die $!;
my @files = grep { $_ !~ /\.\.?$/ } readdir ($dir);
closedir $dir;
print qq($_\n) for @files;
Pandurx
 2007-07-04 17:46
#78184 #78184
User since
2007-06-25
6 Artikel
BenutzerIn
[default_avatar]
hey das funktioniert
vielen dank
damit konnte ich mein programm fertigstellen :)
nepos
 2007-07-04 19:10
#78185 #78185
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
. und .. sind immer dabei. . ist quasi das aktuelle Verzeichnis und .. ein Verweis auf das eine Ebene höher liegende Verzeichnis ;)
Das hat also schon seine Richtigkeit, dass dir readdir() die beiden mit ausgibt.
pktm
 2007-07-04 19:49
#78186 #78186
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Neuerdings bin ich totaler Fan von File::Find::Rule. Das ist so schön einfach zu bedienen und man muss sich um nichts kümmern.
http://www.intergastro-service.de (mein erstes CMS :) )
bo
 2007-07-05 14:41
#78187 #78187
User since
2006-05-09
76 Artikel
BenutzerIn
[default_avatar]
hab mir grad mal CPAN:File::Find::Rule angeschaut...
das ist echt klasse :)
da kann man sich das ganze File::Spec->catfile() zeugs und noch viel mehr sparen
danke für den tip :)
sid burn
 2007-07-05 15:11
#78188 #78188
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Joo ebenfalls danke für den Tipp. Das Modul ist echt super.
Hab auch vorhin ein kleines Skript für ein Freund geschrieben wo ich genau das Modul verwendet habe.

Das Geniale daran, es unterstützt auch eine maxdepth() Funktionalität die File::Find z.B. nicht hat.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
Strat
 2007-07-05 21:00
#78189 #78189
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=bo,04.07.2007, 15:27]
Code (perl): (dl )
1
2
3
4
opendir my $dir, $home or die $!;
my @files = grep { $_ !~ /\.\.?$/ } readdir ($dir);
closedir $dir;
print qq($_\n) for @files;
[/quote]
ein ^ vergessen, damit dateien namens abc.. auch durchrutschen:

Code (perl): (dl )
my @files = grep { $_ !~ /^\.\.?$/ } readdir $dir;
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
bo
 2007-07-05 22:55
#78190 #78190
User since
2006-05-09
76 Artikel
BenutzerIn
[default_avatar]
hups... posting without testing :rock:

aber ich empfehle nun sowieso CPAN:File::Find::Rule :cool:
RPerl
 2007-07-07 17:38
#78191 #78191
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Hallo Leute,

ich hab mir, als ich das posting gelesen habe, ueberlegt, ob und v.a. wie man das ganze auch ohne grep() machen kann.
Zuerst dachte ich daran, mit unshift() oder splice() die ersten beiden Inhalte vom array zu entfernen. Dafuer war ich leider zu bloed. :*(
Nach ca. 60 Minuten rumprobieren, hab ich das hier gezaubert:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/perl

use warnings;
use strict;


my $dir = '/home/dieter';

opendir(DIR, $dir) || die "can\'t opendir $dir: $!";
my @files = readdir(DIR);
for(my $i = 0; $i <= $#files; $i++) {
    print $files[$i], "\n" if $files[$i] !~ /\./;
}


closedir(DIR);


Nun aber meine Frage: Wie kann ich das ganze elegant, ohne grep und bestenfalls sogar ohne regex loesen?

Ich freu mich auf Loesungen,

rPerl\n\n

<!--EDIT|RPerl|1183816194-->
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2007-07-04 17:24.