Thread Dir ohne Unterordner in .txt Datei u.ä.. Wie? (60 answers)
Opened by stormy2211 at 2007-11-02 21:31

topeg
 2007-11-03 22:10
#101797 #101797
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Das vereinfacht die ganze Sach etwas.
Ließ dir das mal durch:
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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!C:\\Perl\bin\perl.exe
use strict;
use warnings;

my $Basisverzeichnis='C://';
my $Verzeichnis=$Basisverzeichnis.'Freunde';
my $Verzeichnis_Datei=$Basisverzeichnis.'Verzeichnis.txt';
my $Namen_Datei=$Basisverzeichnis.'Namensliste.txt';


my @Verzeichnisliste;
opendir(Freunde, $Verzeichnis) or die "Konnte Ordner '$Verzeichnis' nicht öffnen ($!)\n";
while(my $Filename=readdir(Freunde))
{
 next if($Filename =~/^\.|\.\.$/);
 push(@Verzeichnisliste,$Filename) if(-f $Verzeichnis.'/'.$Filename);
}
closedir(Freunde);

my @Namensliste;
for my $Filename (@Verzeichnisliste)
{
 $Filename=~/^(.+?)@/s;
 push(@Namensliste,$1);
}


open(SPEICHERN,'>',$Verzeichnis_Datei) or die "Konnte '$Verzeichnis_Datei' nicht Speichern ($!)\n";
print SPEICHERN join("\n",@Verzeichnisliste);
close(SPEICHERN);

open(SPEICHERN2,'>',$Namen_Datei) or die "Konnte '$Namen_Datei' nicht Speichern ($!)\n";
print SPEICHERN2 join("\n",@Namensliste);
close(SPEICHERN2);

my $Zahl;

#hier sage ich er soll alle Dateien der Reihe nach öffnen bis eben die letze Datei erledigt ist
for my $counter (0..$#Verzeichnisliste)
# "$#Verzeichnisliste" gibt die Nummer des Letzten Eintrages im Array @Verzeichnisliste zurück
# (0..Wert) erzeugt eine Liste (Array) mit den Zahlen von 0 bis Wert.
{
 my $Name=$Namensliste[$counter];
 my $Datei=$Verzeichnisliste[$counter];

# print "$Name <> $Datei\n";
 open (LESEN,'<',$Verzeichnis.'/'.$Datei) or die "konnte '$Verzeichnis/$Datei' nicht öffnen ($!)\n";
 # Zeilentrenner für das Auslesen abschalten
 local $/=undef;
 # die ganze Datei in einem Rutsch einlesen
 my $Data=<LESEN>;
 close(LESEN);

 #falls Name in Datei vorhanden, egal ob/mayer oder Mayer
 #dann wird die Zahl um eins erhöht, falls es 2x vorkommt
 #trotzdem nur einmal da if Bedinung 1x erfüllt und es
 #dann gleich weiter geht
 $Zahl++ if($Data=~/$Name/i);
}

print "Anzahl der Übereinstimmungen insgesammt: $Zahl\n";
print "Anzahl der Dateinamen: ".scalar(@Verzeichnisliste)."\n";
print "Anzahl der Namen: ".scalar(@Namensliste)."\n";

View full thread Dir ohne Unterordner in .txt Datei u.ä.. Wie?