Thread alle Dateien eines Ordners nach String durchsuchen (10 answers)
Opened by Gast at 2005-07-22 13:38

Thorium
 2005-07-22 14:15
#56616 #56616
User since
2003-08-04
232 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=Guest,22.07.2005, 11:38][/quote]
So Stefan... um dir mal einwenig mehr zu Helfen, hab ich hier mal ein paar Tipps für dich

Benutze immer, wenn dus noch nicht getan hast
Code: (dl )
1
2
3
4
use strict;
use warnings;
# Eventuell:
use diagnostics;


Code: (dl )
my $dir = 'c:\Ordner;

Dateipfadangaben kannst du in Perl immer mit einem Vorwärtsslash darstellen - damit stolperst du nicht, wenn du doppelte Anführungszeichen benutzt und es ist auch noch Plattformübergreiffend

Code: (dl )
open (Inhalt,"<","$datei");

open solltest du immer mit einem "or die" belegen - bzw. immer die Fehlermeldung abfangen, wie du es schon bei opendir getan hast.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
 foreach (<Inhalt>)  {
if ($_ !~ /logging/ ) {
}
else {
$Status = 1;
}
}

if ($Status == 0) {
print $datei."\n";
}


Was du hier tust ist, du gehst durch jede einzelne Zeile, schaust, ob logging nicht vorkommt und setzt dann andernfalls den Status. Setz doch den Status einfach, wenn es vorkommt:

Code: (dl )
1
2
3
if ($_ =~ /logging/) {
$Status = 1;
}


Was du auch noch machen kannst ist, dass du die Schleife abbrichst sobald du das Wort gefunden hast. Weil es ist ja schon beim ersten match klar, dass du die Datei nicht aufführen wirst. Aus einer Schleife springst du mit last;

Code: (dl )
1
2
3
4
5
6
foreach (<Inhalt>) {
if (/logging/) {
$Status = 1;
last;
}
}


Wie du siehst, kannst dir das "$_ =~" sparen wenn du willst. Wenn dir aber daran liegt, dass dein Script auch für nicht perl-leiirte lesbar ist, vermeide wenn Möglich $_ - auch wenns praktisch ist.

Die ganze Prozedur, dass du Zeile für Zeile liest kannst du auch umgehen indem du dem regulären Ausdruck sagst, dass er den ganzen Text als eine Zeile behandeln soll.

Code: (dl )
1
2
open (Inhalt,"< $datei") or die $!;
print "$datei\n" unless join('', <Inhalt>) =~ m~logging~s;


Je nachdem kannst du 's' auch weglassen. (s sagt eigentlich dem "." einfach, dass er auch \n matchen soll).
So jetzt geh ich aber was essen... :p
Per|li|nist der; -en, -en <zu ↑...ist>: a) Anhänger, Vertreter der radikalen Perlinisten die Perl als die einzig wahre Sprache ansehen; b) Mitglied einer perlinistischen Community.

View full thread alle Dateien eines Ordners nach String durchsuchen