Schrift
[thread]10787[/thread]

Fehlermeldung (Permission Denied) :(

Leser: 1


<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten
mandawar
 2007-11-13 13:05
#102333 #102333
User since
2005-11-09
26 Artikel
BenutzerIn
[default_avatar]
Hallo,
ich soll auf Arbeit ein kleines Programm schreiben, aber der interpreter gibt mir eine Fehlermeldung aus, mit der ich nicht viel anfangen kann, ausserdem zeigt er mir anstatt "verarbeitet.txt" nur "." in der Kontrollausgabe. Habe mit Perl erst gestern wieder angefangen, deswegen bitte ein wenig Verständnis für die ours ^^
Wäre nett wenn mir jemand weiterhilft :)
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
# C:\Perl\bin\perl.exe

use strict;
use warnings;

# Hier muss der Ordner mit den kleinen Einzeldateien eingetragen werden
# oder das PerlScript in dem Ordner ausgeführt werden, in dem die 
# Textdateien liegen.

our $quelle = ("C\:\\Dokumente\ und\ Einstellungen\\stephan\\Desktop\\output");
our $ziel = ("C\:\\Dokumente\ und\ Einstellungen\\stephan\\Desktop\\output_verarbeitet");
our @txtliste;
my $DateiZumSchreiben = "verarbeitet.txt";


(opendir(DIRHANDLE1,$quelle)) || (die "Das Quellverzeichnis konnte nicht erfolgreich geoeffnet werden: $!");
(opendir(DIRHANDLE2,$ziel)) || (die "Das Zielverzeichnis konnte nicht geoeffnet werden: $!");

@txtliste=readdir(DIRHANDLE1);
foreach my $dateien(@txtliste) {
        if (-d $dateien) {next;}
        unless ($dateien=~ m/\.pl$/i) {
                rename($dateien,$ziel."\\".$dateien) || die "Dateien konnten nicht kopiert werden: $!\n";
        }#unless
} #foreach
closedir(DIRHANDLE1);

@txtliste=readdir(DIRHANDLE2);
unless(open(FH1,"> $ziel"."\\"."$DateiZumSchreiben")) {die "Datei '$DateiZumSchreiben' konnte nicht geoeffnet werden: $!";}
foreach my $dateien(@txtliste) {
        print $dateien;
        unless(open(FH2,$dateien)) {die "Datei '$dateien' konnte nicht geoeffnet werden 2: $!";}
        foreach my $line(<FH2>) {               #für jede Zeile in den kleinen txts
                chomp($line);                           #Abknüppern des \n
                print(FH1 "$line\n");           #Ausgabe in $DateiZumScheiben
                close(FH2);
        } #foreach
} #foreach
close(FH1);


#################################################################################################
Fehlermeldung:
C:\Dokumente und Einstellungen\stephan\Desktop\output>verarbeitung.pl
Datei '.' konnte nicht geoeffnet werden 2: Permission denied at C:\Dokumente und
Einstellungen\stephan\Desktop\output\verarbeitung.pl line 32.
################################################################################################
kurze Erklärung:
Programm verschiet alle .txt in einem Ordner in einen anderen Ordner und soll sie dort in einer Datei
zusammenfassen.




Gruß stephan
mandawar
 2007-11-13 13:12
#102334 #102334
User since
2005-11-09
26 Artikel
BenutzerIn
[default_avatar]
was ich mir grade überlegt habe:
ich öffne das DIR $ziel ja schon ganz am Anfang, bevor die Dateien da reinkopiert werden. Erstellt opendir da schon eine art interne Indexdatei, auf die dann readdir zugreift, weil readdir starte ich ja erst auf den DIRHANDLER2, nachdem ich die Dateien reinkopiert habe, dadurch würde auch @txtliste und $dateien leer werden, oder sehe ich das falsch???
Gruß stephan
renee
 2007-11-13 13:29
#102335 #102335
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Es schlägt die Zeile mit dem open FH2 fehl...

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
# C:\Perl\bin\perl.exe

use strict;
use warnings;

# besser "my" und ' verwenden...
my $quelle = 'C:\Dokumente und Einstellungen\stephan\Desktop\output';
my $ziel   = 'C:\Dokumente und Einstellungen\stephan\Desktop\output_verarbeitet';
my $DateiZumSchreiben = 'verarbeitet.txt';
my @txtliste;
my @files;


# besser lexikalische dirhandles verwenden...
if( opendir my $dirh1,$quelle ){
   while( my $file = readdir $dirh1 ){
      my $path = $quelle . '\\' . $file;
      next if -d $path;
      unless( $file =~ /\.pl$/i ){
         my $path = $ziel . '\\' . $file;
         push @files, $path;
         rename $path, $path;
      }
   }
}
else{
   die "Das Quellverzeichnis konnte nicht erfolgreich geoeffnet werden: $!";
}

# besser 3-Arg-open verwenden
if( open my $out, '>', $ziel . '\\' . $DateiZumSchreiben ){
   for( @files ){
      if( open my $in, '<', $_ ){
         while( my $line = <$in> ){
            chomp $line;
            print $out $line,"\n";
         }
      }
   }
}
else{
   die "Konnte Datei '$DateiZumSchreiben' nicht oeffnen: $!";
}
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/
mandawar
 2007-11-13 14:08
#102338 #102338
User since
2005-11-09
26 Artikel
BenutzerIn
[default_avatar]
vielen Dank, aber was genau war jetzt an der Zeile verkehrt?!
gruß stephan
renee
 2007-11-13 14:10
#102339 #102339
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du hast mit dem zweiten Verzeichnishandle alles aus dem Zielverzeichnis in das Array @txtfiles geladen - auch die Einträge '.' und '..'. Du hast nicht überprüft, ob wirklich nur .txt-Dateien im Array landen...

Und dann konntest Du natürlich nicht das Verzeichnis (was ja '.' ist) zum Schreiben öffnen...
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/
mandawar
 2007-11-13 14:12
#102340 #102340
User since
2005-11-09
26 Artikel
BenutzerIn
[default_avatar]
achso, alles klar, also müsst ich im Prinzip nur ne regex noch einbaun und guggen ob das element ein "." am anfang hat oder überprüfen ob es ein ordner ist, dann würde mein (schlechter) code laufen?!
gruß stephan
renee
 2007-11-13 14:17
#102341 #102341
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
In Zeile 28 aus: @txtliste=readdir(DIRHANDLE2); einfach
Code (perl): (dl )
1
2
3
@txtliste= grep{ $_ =~ /\.txt/  and -f $_ }           # test ob es .txt-Datei ist
                map{ $ziel . '\\' . $_ }                         # Pfad zusammensetzen
                readdir(DIRHANDLE2);                        # auslesen
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/
pq
 2007-11-13 14:38
#102344 #102344
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
renee+2007-11-13 13:17:29--
Code (perl): (dl )
@txtliste= grep{ $_ =~ /\.txt/  and -f $_ }           # test ob es .txt-Datei ist

vorsicht, da ist ein fehler drin. $_ enthaelt nur den dateinamen, aber nicht den verzeichnispfad.
wenn man sich nicht gerade in dem auszulesenden verzeichnis befindet, wird -f $_ meist
fehlschlagen.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
renee
 2007-11-13 14:41
#102345 #102345
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Nö, da ich ja vorher das map habe...
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/
mandawar
 2007-11-13 14:42
#102346 #102346
User since
2005-11-09
26 Artikel
BenutzerIn
[default_avatar]
ok danke erstmal, mein Code sieht zur Zeit aus wie Schaschlik und ich glaub ich muss das nochmal genauer anguggen und durchdenken, weil dein Code (einfach eingefügt und probiert) liefert ne leere verarbeitet.txt und mein gewurschtel zur Zeit leider auch noch:
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
# C:\Perl\bin\perl.exe

use strict;
use warnings;

# Hier muss der Ordner mit den kleinen Einzeldateien eingetragen werden
# oder das PerlScript in dem Ordner ausgeführt werden, in dem die 
# Textdateien liegen.

my $quelle = 'C:\Dokumente und Einstellungen\stephan\Desktop\output';
my $ziel = 'C:\Dokumente und Einstellungen\stephan\Desktop\output_verarbeitet';
my @txtliste;
my $DateiZumSchreiben = "verarbeitet.txt";
our $files;
our $fh1;
our $fh2;


(opendir(my $dhandle1,$quelle)) || (die "Das Quellverzeichnis konnte nicht erfolgreich geoeffnet werden: $!");
(opendir(my $dhandle2,$ziel)) || (die "Das Zielverzeichnis konnte nicht geoeffnet werden: $!");

@txtliste=readdir($dhandle1);
foreach my $dateien(@txtliste) {
        if (-d $dateien) {next;}
        unless ($dateien=~ m/\.pl$/i) {
                rename($dateien,$ziel."\\".$dateien) || die "Dateien konnten nicht kopiert werden: $!\n";
        }#unless
} #foreach
closedir($dhandle1);

#@txtliste=readdir($dhandle2);
@txtliste= grep{ $_ =~ /\.txt/  and -f $_ }             # test ob es .txt-Datei ist
                   map{ $ziel . '\\' . $_ }                     # Pfad zusammensetzen
               readdir($dhandle2);                                                      #auslesen

if( open my $out, '>', $ziel . '\\' . $DateiZumSchreiben ){
   for(my @files ){
      if( open my $in, '<', $_ ){
         while( my $line = <$in> ){
            chomp $line;
            print $out $line,"\n";
         }
      }
   }
}
else{
   die "Konnte Datei '$DateiZumSchreiben' nicht oeffnen: $!";
}

#unless(open($fh1,">> $ziel"."\\"."$DateiZumSchreiben")) {die "Datei '$DateiZumSchreiben' konnte nicht geoeffnet werden: $!";}
#foreach my $dateien(@txtliste) {
#       print $dateien;
#       unless(open($fh2,$dateien)) {die "Datei '$dateien' konnte nicht geoeffnet werden 2: $!";}
#       foreach my $line(<$fh2>) {              #für jede Zeile in den kleinen txts
#               chomp($line);                           #Abknüppern des \n
#               print($fh1 "$line\n");          #Ausgabe in $DateiZumScheiben
#               close($fh2);
#       } #foreach
#} #foreach
#close($fh1);


Mist, jetz hab ich voll Lust auf Fleischspieß :(
<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten



View all threads created 2007-11-13 13:05.