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

topeg
 2007-11-03 20:07
#101789 #101789
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
So ist das ganze etwas Eleganter:
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='./';
my $Verzeichnis=$Basisverzeichnis.'Freunde';
my $Verzeichnis_Datei=$Basisverzeichnis.'Verzeichnis.txt';
my $Namen_Datei=$Basisverzeichnis.'Namensliste.txt';


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

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


open(SPEICHERN,'>',$Verzeichnis_Datei) or die "Konnte '$Verzeichnis_Datei' nicht Speichern ($!)\n";
print SPEICHERN join("\n",@Verzeichnis);
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 $Dateiname (@Verzeichnis)
{
 open (LESEN,'<',$Verzeichnis.'/'.$Dateiname) or die "konnte '$Verzeichnis/$Dateiname' nicht öffnen ($!)\n";
 # Zeilentrenner für das Auslesen abschalten
 local $/=undef;
 # die ganze Datei in einem Rutsch einlesen
 my $Data=<LESEN>;

 for my $Name (@Namensliste)
 {
  #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
  if($Data=~/$Name/i)
  {
   $Zahl++;
  }
 }
 close(LESEN)
}

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

und bitte, bitte gewöhne dir das Einrücken an. Das hilft dir wirklich sehr bei größeren Projekten.

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