Schrift
[thread]10711[/thread]

Dir ohne Unterordner in .txt Datei u.ä.. Wie? (Seite 3)

Leser: 25


<< |< 1 2 3 4 5 6 7 >| >> 61 Einträge, 7 Seiten
renee
 2007-11-03 16:24
#101765 #101765
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
topeg+2007-11-03 15:14:34--
Genau deshalb habe ich nicht diese Konstruktion gewählt, sondern auf etwas schon bekanntes zurück gegriffen :-)


Man muss sich ja ständig weiterentwickeln, oder ;-)
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
stormy2211
 2007-11-03 16:35
#101769 #101769
User since
2007-11-02
20 Artikel
BenutzerIn
[default_avatar]
Hab des jetzt eingebaut, aber funktioniert bei mir i-wie noch nicht, was hab ich falsch eingebaut oder angewandt? bin sowieso mit eurem Fachgesimpel momentan überfordert *g
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
64
65
66
67
68
#!C:\\Perl\bin\perl.exe
use strict;
use warnings;

my $test=0; #mit der Zahl wird die Anzahl der Dateien gelesen
my @Verzeichnis;
opendir(Freunde, 'C://Freunde') or die "Konnte Ordner nicht öffnen ($!)\n";
while(my $Filename=readdir(Freunde))
{next if($Filename eq '.' or $Filename eq '..');
if(-f 'C://Freunde/'.$Filename)
{$test=$test+1;
push(@Verzeichnis,$Filename);
}
}
closedir(Freunde);

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


open(SPEICHERN,'>','C://Verzeichnis.txt') or die "Konnte Verzeichnis nicht Speichern ($!)\n";
print SPEICHERN join("\n",@Verzeichnis);
close(SPEICHERN);

open(SPEICHERN2,'>','C://Namensliste.txt') or die "Konnte Titelliste nicht Speichern ($!)\n";
print SPEICHERN2 join("\n",@Namensliste);
close(SPEICHERN2);

#des darüber stehende ab hier will ich nicht mehr verändern, des funzt ja alles dank hilfe =)
print "$test\n$Verzeichnis[03]\n$Namensliste[03]\n";
#übereinstimmung von verz-->namen und wieviele .txt es gibt wird angezeigt

my @inhalt;
my $Zahl;
for (my $s=00;$s<=$test;$s++)
#hier sage ich er soll alle Dateien der Reihe nach öffnen bis eben die letze Datei erledigt ist
#wäre das dann nicht <=$test-1 statt <=$test ?
{
#für was müsste ich hier $Dateiname einsetzen? bei mir finde ich diese Variabel nicht
#müsste ich in meinem Fall dann $Verzeichnis[$s] einsetzen?
for my $Dateiname (@Verzeichnis)
open(LESEN,"<","C://Freunde/$Verzeichnis[$s]");
my @inhalt=<LESEN>;
my $Data=join(' ', @inhalt); #hier wird inhalt in eine Zeile gestopft 
#also slurpen soweit ich verstanden habe
for my $Name (@Namensliste[$s])
{
#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 "$Zahl\$test\n";
<stdin>
#hier lasse ich mir eben ausgeben in wievielen
#Textdateien der Name wo im Namen der Datei stand
#auch im Dateiinhalt steht und wieviele Dateien
#es insgesamt waren.

Ich hab doch eigentlich nichts anderes gemacht damit er eben eure Suchfunktion bei jeder Datei $Verzeichnis[$s] nach dem Namen $Namensliste[$s] durchsucht. und das eben so oft es eine Datei gibt.
wenn ich z.bsp folgendes habe:
mayer@ort1.txt (in dieser Datei steht /mayer drin.)
müller@ort2.txt (hier steht müller drin)
dieter@ort3.txt (diese datei enthält den Namen dieter nicht)
dann müsste als Ergebnis rauskommen:
2 (2 Dateien enthielten ihren Namen)
Feuer! was mach ich falsch?
mfg stormy
topeg
 2007-11-03 16:54
#101772 #101772
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Einrücken Hilft bei der Übersichtlichkeit.
du hast ein paar schreibfehler normalerweise hätte perl fehler melden müssen.
Wie startest du die Perlscripte?
per Doppelklick, oder über die Eingabeaufforderung (Konsole)?
Über die Konsole ist es besser, da du dann auch die Fehlermeldungen sehen kannst und das "<STDIN>" am Ende nicht brauchst.

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
64
65
66
67
68
69
70
71
#!C:\\Perl\bin\perl.exe
use strict;
use warnings;

my $test=0; #mit der Zahl wird die Anzahl der Dateien gelesen
my @Verzeichnis;
opendir(Freunde, 'C://Freunde') or die "Konnte Ordner nicht öffnen ($!)\n";
while(my $Filename=readdir(Freunde))
{
 next if($Filename eq '.' or $Filename eq '..');
 if(-f 'C://Freunde/'.$Filename)
 {
  $test=$test+1;
  push(@Verzeichnis,$Filename);
 }
}
closedir(Freunde);

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

 
open(SPEICHERN,'>','C://Verzeichnis.txt') or die "Konnte Verzeichnis nicht Speichern ($!)\n";
print SPEICHERN join("\n",@Verzeichnis);
close(SPEICHERN);
 
open(SPEICHERN2,'>','C://Namensliste.txt') or die "Konnte Titelliste nicht Speichern ($!)\n";
print SPEICHERN2 join("\n",@Namensliste);
close(SPEICHERN2);
 
#des darüber stehende ab hier will ich nicht mehr verändern, des funzt ja alles dank hilfe =)
print "$test\n$Verzeichnis[03]\n$Namensliste[03]\n";
#übereinstimmung von verz-->namen und wieviele .txt es gibt wird angezeigt

my @inhalt;
my $Zahl;
for (my $s=00;$s<=$test;$s++)
#hier sage ich er soll alle Dateien der Reihe nach öffnen bis eben die letze Datei erledigt ist
#wäre das dann nicht <=$test-1 statt <=$test ?
{
 #für was müsste ich hier $Dateiname einsetzen? bei mir finde ich diese Variabel nicht
 #müsste ich in meinem Fall dann $Verzeichnis[$s] einsetzen?
# for my $Dateiname (@Verzeichnis) # < nicht nötig in deinem Code. keine Fehlermeldung?
 open(LESEN,"<","C://Freunde/$Verzeichnis[$s]"); 
 my @inhalt=<LESEN>;
 my $Data=join(' ', @inhalt); #hier wird inhalt in eine Zeile gestopft 
 #also slurpen soweit ich verstanden habe
 # for my $Name (@Namensliste[$s])# < geht so nicht. Keine Fehlermeldung?
 for my $Name (@Namensliste) # Gehe die gesamte Namensliste durch
 {
  #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 "$Zahl\$test\n";
<stdin>
#hier lasse ich mir eben ausgeben in wievielen
#Textdateien der Name wo im Namen der Datei stand
#auch im Dateiinhalt steht und wieviele Dateien
#es insgesamt waren.
stormy2211
 2007-11-03 16:58
#101773 #101773
User since
2007-11-02
20 Artikel
BenutzerIn
[default_avatar]
mach es immer per Doppelklick, habs nicht gewusst das es die Fehler bei cmd anzeigt, gleich mal ausprobieren =)
thx für die tipps und Infos =)
mfg stormy
stormy2211
 2007-11-03 17:00
#101774 #101774
User since
2007-11-02
20 Artikel
BenutzerIn
[default_avatar]
uiuiuiuuuiuiui.......... 0o.
Fehlermonster nr.1 xD, cmd sei dank *g
bin mal bissl ausbessern soweit ich da noch nen Überblick habe
(ich glaube ich sollte echt mal einrücken etc. machen, wäre glaub besser *g)
mfg stormy
stormy2211
 2007-11-03 17:12
#101775 #101775
User since
2007-11-02
20 Artikel
BenutzerIn
[default_avatar]
soo, hab alle Fehler soweit ich konnte behoben. Aber 3 wollen einfach nicht weg gehen:

"my" variable $Zahl mask earlier declaration in same scope at... line71
und
syntax error at.... line50, near ")
und der letzte:
open "
Execution of ... aborted due to compilation errors.

meine überarbeitete "version" (nur der untere Code Teil):

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
for (my $s=00;$s<=$test;$s++) #Zeile41
#hier sage ich er soll alle Dateien der Reihe nach öffnen bis eben die letze Datei erledigt ist
#wäre das dann nicht <=$test-1 statt <=$test ?
{
#für was müsste ich hier $Dateiname einsetzen? bei mir finde ich diese Variabel nicht
#müsste ich in meinem Fall dann $Verzeichnis[$s] einsetzen?
for my $Dateiname (@Verzeichnis) #Zeile47


open (LESEN,"<C:/Freunde/my $Verzeichnis[$s]");     #Zeile50
my @inhalt=<LESEN>;    #Zeile51
my $Data=join(' ', @inhalt);      #Zeile52
#hier wird inhalt in eine Zeile gestopft 
#also slurpen soweit ich verstanden habe
for my $Name ($Namensliste[$s])      #Zeile55

{
#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)      #Zeile62
{
my $Zahl++;     #Zeile64
}

}
close(LESEN)      #Zeile68
}

print my $Zahl;     #Zeile71
print my $test;     #Zeile72
<stdin>
#hier lasse ich mir eben ausgeben in wievielen
#Textdateien der Name wo im Namen der Datei stand
#auch im Dateiinhalt steht und wieviele Dateien
#es insgesamt waren.

Was heißen die oben genannten Fehler eigentlich genau (bis auf Syntax-Fehler den kenne ich mittlerweile, auch wenn ich nicht weiß was bei mir in der Syntax nicht stimmt)
mfg stormy
#Kein Kommentar
 2007-11-03 17:33
#101777 #101777
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
1. Fehler: ist keiner sondern eine warnung von "use warnings"
2. Fehler: die geschweifte klammer hinter dem for fehlt, müsste dann aber eigentlich eine andere fehlermeldung geben
3. Fehler: heißt "die ausführung oder das kompilieren von ... wurde wegen zwei fehlern abgebrochen"
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
topeg
 2007-11-03 17:35
#101778 #101778
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Es bringt nichts überall "my" zu schreiben. denn "my" initialisiert die Variable. Danach kannst du die Variable normal verwenden, denn Perl weiß nun wie sie heißt.
Allso wenn du eine Variable das erste mal nutzen willst, dann musst du sie mit "my" initialisieren, danach nicht mehr.

Zeile 47:
Wozu brauchst du die Zeile? Sie ist unnötig und führt zu einem Fehler so wie du sie verwendest. Das versucht dir die Meldung "syntax error at.... line50, near ")" mit zu teilen.
stormy2211
 2007-11-03 18:11
#101781 #101781
User since
2007-11-02
20 Artikel
BenutzerIn
[default_avatar]
Ihr seid die GRÖßTEN, es funzt, es FUNKTIONIERT tatsächlich, ihr seid sooo hamma. =))
Hab zwar immer noch meldungenen wo ich nicht weiß was sie bedeuten aber dass
gewünschte Ergebnis kommt raus. Supi!!
danke danke danke
einen schönen abend noch
mfg stormy alias patrick
ps:
falls jmd noch lust hat kann er mir noch schnell sagen für was die Meldungen stehen:
Use of uninitialized value in concatenation (.) or string at .... line 46
bekomme ich noch 2x für line 47 und 59
topeg
 2007-11-03 18:21
#101782 #101782
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Die Meldung ist eine Warnung (vom Modul "warnigs").
Sie besagt, dass du versuchst Strings zusammen zu fügen ".", wobei mindestens ein nicht initialisiert ist. (und damit nichts enthält.)
Nach dem korrigieren des Codes sind natürlich auch die Zeilen verrutscht, und somit kann ich dir nichts genaueres sagen.
<< |< 1 2 3 4 5 6 7 >| >> 61 Einträge, 7 Seiten



View all threads created 2007-11-02 21:31.