Schrift
[thread]8351[/thread]

filehandleproblem



<< |< 1 2 >| >> 14 Einträge, 2 Seiten
Noisebreath
 2006-09-20 15:36
#70108 #70108
User since
2006-04-14
72 Artikel
BenutzerIn
[default_avatar]
Code: (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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
foreach my $ele (@documentlist){
    if(@{$ele->child()}){
        if(!@{$ele->parent()}){
            my $file = ${$ele->name()}.'.html';
            open(my $fh,'>',$file) or die $!;+
            my $string = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
           "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>'.$file.'</title></head><body>'.
           '<a href="'.${$ele->name()}.".html".'">Zurück</a><br/><br/><br/> <table border>';
        }else{
            my $file = ${$ele->name()}.'.html';
            open(my $fh,'>',$file) or die $!;+
            my $string = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
           "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>'.$file.'</title></head><body>'.
           '<a href="'.@{$ele->parent()}[0].".html".'">Zurück</a><br/><br/><br/> <table border>';
        }

           my $header = ${$ele->child()}[0];
           
            # erzeuge headerzeile
           foreach my $ele2 (@documentlist){
           
               if($header eq ${$ele2->name()}){
                 
  
                 
  my %hash = %{$ele2->spalteninfo()};
                 
     my @sorted = sort keys %hash;
               
     $string .= '<tr>';
                 
     for my $key(@sorted){
                     
     $string .= '<th>'.$key.'</th>';
                 
     }
                 
     $string .= '</tr>';
                 
     last;
                 
 }
            }
            # erzeuge spalteninformationszeilen
            foreach my $child (@{$ele->child()}){
               
 foreach my $ele3 (@documentlist){
               
     if($child eq ${$ele3->name()}){
               
     # Wenn keine Blätter
               
         if(@{$ele3->child()}){
               
             my %hash = %{$ele3->spalteninfo()};
                 
             my @sorted = sort keys %hash;
                 
             $string .= '<tr>';
                 
             for my $key(@sorted){
                 
                  if($key eq "Titel"){
                 
                  $string .= '<td><a href="'.${$ele3->name()}.".html".'">'.$hash{$key}.'</a></td>';
                 
               
  }else{
                   
              $string .= '<td>'.$hash{$key}.'</td>';
                   
              }
                 
             }
                 
             $string .= '</tr>';
                 
         }else{
                 
         # Wenn Blätter
               
             my %hash = %{$ele3->spalteninfo()};
                 
             my @sorted = sort keys %hash;
                 
             $string .= '<tr>';
                 
             for my $key(@sorted){
                 
                  if($key eq "Titel"){
                 
                  $string .= '<td><a href="'.${$ele3->name()}.".".${$ele->doc_format()}.'">'.$hash{$key}.'</a></td>';
                 
               
  }else{
                   
              $string .= '<td>'.$hash{$key}.'</td>';
                   
              }
                 
             }
                 
             $string .= '</tr>';
                 
         }
               
     }
               
 }
            }
            $string .= '</table></body></html>';

#########Problem    print $fh $string;
            close $fh or die $!;
    }
}


er gibt mir die fehlermeldung:

print<> on closed filehandle $fh at main.pl
Bad file descriptor at etc..

Ich verstehe nicht wieso er proble macht. Die Fehlermeldung gibts erst seitdem ich ne if abfrage gemacht hab um dann das filehandle zu öffnen. es sollte doch eigentlich kein unterschied machen oder?\n\n

<!--EDIT|Noisebreath|1158752234-->
Crian
 2006-09-20 15:44
#70109 #70109
User since
2003-08-04
5871 Artikel
ModeratorIn
[Homepage]
user image
An welcher Stelle meckert er denn? Ich vermute mal, dass $fh einfach nicht mehr definiert ist an der Stelle. Also schreib erst My $fh; und weise die Werte dann in dem if-Block zu.

Generell wäre es gut, wenn Du die Einrückungen so vornimmst, dass gleiche logische Ebenen auf der gleichen Einrückungstiefe stehen. Ich empfehle da vier Leerzeichen zum Einrücken (ohne damit einen Glaubenskrieg lostreten zu wollen über Einrückzeichen oder die Verwendung von Tabulatoren).\n\n

<!--EDIT|Crian|1158752822-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Noisebreath
 2006-09-20 15:59
#70110 #70110
User since
2006-04-14
72 Artikel
BenutzerIn
[default_avatar]
so funktionierts danke, auch wenn ich nicht verstehe was das für einen unterschied macht..


p.s.:ich hab normalerweise ganz einfache einrückungen aber komischerweise wenn ich copy&paste mache gibt er mir das hier aus.. :-/
renee
 2006-09-20 16:00
#70111 #70111
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Nimm das
Code: (dl )
            open(my $fh,'>',$file) or die $!;
aus if und elsif raus und schreibe es als erste Zeile innerhalb der äußeren foreach-Schleife!\n\n

<!--EDIT|renee|1158756620-->
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/
renee
 2006-09-20 16:01
#70112 #70112
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=Noisebreath,20.09.2006, 13:59]p.s.:ich hab normalerweise ganz einfache einrückungen aber komischerweise wenn ich copy&paste mache gibt er mir das hier aus.. :-/[/quote]
Arbeitest Du mit Tabs und Leerzeichen vermischt?
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
 2006-09-20 16:04
#70113 #70113
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Wiki:use strict
man sieht an deinem code und an der fehlermeldung, dass du kein strict benutzt hast.
mit strict würde der code nämlich gar nicht kompilieren.
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
Noisebreath
 2006-09-20 16:27
#70114 #70114
User since
2006-04-14
72 Artikel
BenutzerIn
[default_avatar]
doch ich benutze strict und nein ich arbeite eigentlich soweit ich weiss nur mit tabulatoren.

Wenn wir grad an dem programmschnipsel sind könnt ihr mir vielleicht bei nem weiteren problem helfen.
Ich hab ja die if abfrage und je nachdem schreibe ich entweder den link oder was anderes.

Als ich die if abfrage nicht drin hatte lief alles wie geschmiert und meine files sahen so aus zb:
Code: (dl )
1
2
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd><html><head><title>P009358336.html</title></head><body><a href="P009358336.html">Zurück</a><br/><br/><br/> <table border><tr><th>Datum</th><th>Recht</th><th>Stichwort für SAP und ZA</th><th>Titel</th><th>Verfasser</th><th>logischer Aktenschrank</th><th>logischer Ordner</th><th>logisches Register</th></tr><tr><td>01.03.2005</td><td>00AB</td><td>Test</td><td><a href="P009401923.html">8.1 Test</a></td><td>Lüdtke</td><td>DA</td><td>Verf. d.3</td><td>Test</td></tr><tr><td>01.03.2005</td><td>00AB</td><td>Abnahme</td><td><a href="P009401926.html">8.2 Abnahme</a></td><td>Lüdtke</td><td>DA</td><td>Verf. d.3</td><td>Test</td></tr></table></body></html>

Seitdem ich die ifabfrage aber drinnen habe verhaut es mir alles aber meine datei sieht in meinen augen gleich aus
Code: (dl )
1
2
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd><html><head><title>index.html</title></head><body><h3 align=center>Startseite</h3><br/><br/><br/> <table border><tr><th>Name</th><tr><tr><td><a href="P009358336.html">P009358336</a></td></tr></table></body></html><tr><th>Datum</th><th>Recht</th><th>Stichwort für SAP und ZA</th><th>Titel</th><th>Verfasser</th><th>logischer Aktenschrank</th><th>logischer Ordner</th><th>logisches Register</th></tr><tr><td>01.03.2005</td><td>00AB</td><td>Test</td><td><a href="P009401923.html">8.1 Test</a></td><td>Lüdtke</td><td>DA</td><td>Verf. d.3</td><td>Test</td></tr><tr><td>01.03.2005</td><td>00AB</td><td>Abnahme</td><td><a href="P009401926.html">8.2 Abnahme</a></td><td>Lüdtke</td><td>DA</td><td>Verf. d.3</td><td>Test</td></tr></table></body></html>

hat jemand ne idee woran das liegen kann?
danke im voraus\n\n

<!--EDIT|renee|1158755453-->
Noisebreath
 2006-09-20 16:30
#70115 #70115
User since
2006-04-14
72 Artikel
BenutzerIn
[default_avatar]
moment ich seh grad doch dass sie unterschiedlich sind .. überprüfe das alles mal
sry nochmal
renee
 2006-09-20 16:32
#70116 #70116
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich würde Dir empfehlen, mal ein Templating-System wie CPAN:HTML::Template::Compiled anzuschauen...
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/
Noisebreath
 2006-09-20 16:45
#70117 #70117
User since
2006-04-14
72 Artikel
BenutzerIn
[default_avatar]
übrigens das mit dem
open($fh,'>',$file) or die $!;+
vor die if anweisung schreiben geht nicht.

den fehler erkenne ich leider noch immer nicht:

was zu sehen ist ist dass er als $file index.html verwendet was ich aber vorher eigentlich schon abgehandelt hatte.
Code: (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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
my $file = "index.html";
open(my $fh,'>',$file) or die $!;+

my $string = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"><html><head><title>'.$file.'</title></head><body>'.
'<h[3] align=center>Startseite</h[3]><br/><br/><br/> <table border><tr><th>Name</th><tr>';

foreach my $ele (@rootlist){
$string .= '<tr><td><a href="'.${$ele->name()}.".html".'">'.${$ele->name()}.'</a></td></tr>';
}

$string .= '</table></body></html>';

# print = Ausgabe
# $fh in den Filehandle
# $string das was geschrieben werden soll
print $fh $string;

close $fh or die $!;




# Erzeuge alle HTML-Seiten aus Documentlist mit parents

my @doneele;
foreach my $ele (@documentlist){
if(@{$ele->child()}){
if(!@{$ele->parent()}){
my $file = ${$ele->name()}.'.html';
open($fh,'>',$file) or die $!;+
my $string = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"><html><head><title>'.$file.'</title></head><body>'.
'<a href="'.${$ele->name()}.".html".'">Zurück</a><br/><br/><br/> <table border>';
}else{
my $file = ${$ele->name()}.'.html';
open($fh,'>',$file) or die $!;+
my $string = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"><html><head><title>'.$file.'</title></head><body>'.
'<a href="'.@{$ele->parent()}[0].".html".'">Zurück</a><br/><br/><br/> <table border>';
}

my $header = ${$ele->child()}[0];

# erzeuge headerzeile
foreach my $ele2 (@documentlist){

if($header eq ${$ele2->name()}){



my %hash = %{$ele2->spalteninfo()};

my @sorted = sort keys %hash;

$string .= '<tr>';

for my $key(@sorted){

$string .= '<th>'.$key.'</th>';

}

$string .= '</tr>';

last;

}
}
# erzeuge spalteninformationszeilen
foreach my $child (@{$ele->child()}){

foreach my $ele3 (@documentlist){

if($child eq ${$ele3->name()}){


# Wenn keine Blätter

if(@{$ele3->child()}){

my %hash = %{$ele3->spalteninfo()};

my @sorted = sort keys %hash;

$string .= '<tr>';

for my $key(@sorted){

if($key eq "Titel"){

$string .= '<td><a href="'.${$ele3->name()}.".html".'">'.$hash{$key}.'</a></td>';


}else{

$string .= '<td>'.$hash{$key}.'</td>';

}

}

$string .= '</tr>';

}else{

# Wenn Blätter

my %hash = %{$ele3->spalteninfo()};

my @sorted = sort keys %hash;

$string .= '<tr>';

for my $key(@sorted){

if($key eq "Titel"){

$string .= '<td><a href="'.${$ele3->name()}.".".${$ele->doc_format()}.'">'.$hash{$key}.'</a></td>';


}else{

$string .= '<td>'.$hash{$key}.'</td>';

}

}

$string .= '</tr>';

}

}

}
}
$string .= '</table></body></html>';

print $fh $string;
close $fh or die $!;
}
}


jemand ne idee warum er da weiterhin das $file benutzt und worin der fehler liegt? :-/
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2006-09-20 15:36.