hi,
wollte mal fragen was die beste und einfachste methode ist, wenn ich mit einem script den inhalt aller datein(txt) in einem verzeichnis durchsuchen will.
also mit anderen worten: wenn ich jede im verzeichnis einmal mit while ($line = <IN>) durchlaufen will, wie bekomme ich dann nacheinander alle datein im verzeichnis in IN?
max
User since
2003-08-04
14371
Artikel
ModeratorIn
perldoc -f opendir
perldoc -f readdir
perldoc -f closedir
opendir(DIR,$verzeichnis) or die $!;
my @files = grep{-f $verzeichnis.'/'.$_}readdir(DIR);
closedir DIR;
for my $file(@files){
# durchsuchen
}
Fuer das Durchsuchen wuerde ich vielleicht
Tie::File und grep benutzen oder
File::Slurp...
User since
2006-01-14
1
Artikel
BenutzerIn
ok, vielen dank erstmal. soweit läuft es. nur was muss ich in die <> klamm schreiben, damit ich in der while schleife jede zeile der datei bekomme. mit $file gehts irgendwie nicht, da kommt er nie in die schleife.
for my $file(@files){
print "1\n";
while ($line = <$file>)
{something
}
User since
2003-08-11
457
Artikel
BenutzerIn
Du musst jede Datei fuer sich oeffnen und durchlaufen.
open(FH, '<', $file) or die $!;
while(my $line = <FH>) {
# ...
Nicht vergessen die perldocs zu lesen die renee dir genannt hat! ;)
,,Das perlt aber heute wieder...'' -- Dittsche
User since
2003-08-04
7321
Artikel
ModeratorIn
[quote=renee,14.01.2006, 20:23]my @files = grep{-f $verzeichnis.'/'.$_}readdir(DIR);[/quote]
sowas ist mir zu
1. speicher intensiv
2. langsam
besser
opendir(DIR,$verzeichnis) or die $!;
while(my $filename = readdir DIR)) {
my $file = $verzeichnis . '/' . $filename;
next unless -f $file;
# durchsuchen
}
closedir DIR;
\n\n
<!--EDIT|esskar|1137283646-->
User since
2003-08-04
14371
Artikel
ModeratorIn
@esskar: jepp, hast recht...
User since
2005-02-18
357
Artikel
BenutzerIn
Laufzeitmäßig benchmarke ich renees grep-Variante etwa 5% schlechter als esskars while.
Klar, Speicherverbrauch ist O(n) gegenüber O(1), aber außer man hat tausende von Dateien im Verzeichnis macht das IMHO nicht wirklich was aus?!
I sense a soul in search of answers.
User since
2003-08-04
7321
Artikel
ModeratorIn
[quote=pKai,15.01.2006, 14:48]Klar, Speicherverbrauch ist O(n) gegenüber O(1), aber außer man hat tausende von Dateien im Verzeichnis macht das IMHO nicht wirklich was aus?![/quote]
ja... sobald es aber rekursiv wird, wirds hässlich...
bei wenig datein/verzeichnissen macht es nicht viel aus... aber das weiß man ja nicht
(PS: stört mich momentan bei C# ... da gibt es IMHO nur die möglichkeit, ein array aller verzeichnisse/files geben zu lassen ... das kann ab und an sau langsam sein
User since
2003-08-04
14371
Artikel
ModeratorIn
Sobald es rekursiv wird, benutze ich eh
File::Find...
User since
2003-08-04
12208
Artikel
Admin1
es geht auch noch einfacher:
perl -wle'print while <>' dir/*
<> kann man hier auch mit
<ARGV> ersetzen.