Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]113[/thread]

Problem beim auslesen einer *.txt Datei!: Problem beim auslesen einer *.txt Datei!

Leser: 1


<< |< 1 2 >| >> 19 Einträge, 2 Seiten
Gast Gast
 2003-12-15 12:13
#506 #506
Hi @ all,
hab ein Perl script das auf ner linux maschine läuft. ich wollte es mit xampp(apache server) offline verfügbar machen, habe aber dann gemerkt das das script die Text Datei nicht ausliest und die Einträge in das Formularfeld einfügt.Das Perl script liegt im xampp unter htdocs/cgi-bin und die text datei unter htdocs/data . Hier mal das script indexneu.pl :
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
#!C:\Perl\bin\perl.exe

print "Content-type: text/html\n\n";
print "<html><h1>Hello</h1></html>\n";

print "<head>\n";
print "<title>TEST</title>\n";
print "</head>\n";

&getmychoices;

print "<body link=\"\#000000\" bgcolor=\"\#F0F2FF\">\n";

print "<table border=\"1\">\n";
print "<tr>\n";
print "<td width=\"80\" height=\"1\">Select Stadt</td>\n";
print "<td font face=\"arial\" size=\"2\"><select name=\"stadt\" size=\"1\">\n";

for(getchoices("stadt")) {
print "<option value=\"$_\">$_</option>\n";
}

print "</select></font></td></tr>\n";

print "<tr>\n";
print "<td width=\"80\" height=\"1\">Select Daten</td>\n";
print "<td font face=\"arial\" size=\"2\"><select name=\"daten\" size=\"1\">\n";

for(getchoices("daten"))
{
@typ_split = split(/\|\|/,$_);
print "<option value=\"$_\">@typ_split[0]</option>\n";
}

print "</select></font></td></tr>\n";
print "</table>\n";

print "</body>\n";
print "</html>\n";


sub getchoices {
@back = "";
pop(@back);
$on = 0;

for(@mychoices) {
if ($_ =~ /<\#$_[0]>/) { $on = 0; }
if ($on == 1) { push(@back,$_); }
if ($_ =~ /<$_[0]>/) { $on = 1; }
}

for (@back) {
$_ =~ s/[\n]//;
}

return @back;
}

sub getmychoices {
$self_name = substr($0,rindex($0,"\\")+1);
$self_path = substr($0,0,rindex($0,"\\")+1);

chdir("/data");
open(ALT,"<choices.txt");

while(<ALT>) {
push(@choices,$_);
}

close(ALT);
$on = 0;
for(@choices) {
if ($_ =~ /<!!>end choices.+$self_name<!!>/) {$on = 0;}

if ($on == 1) {
push(@mychoices,$_);
}
if ($_ =~ /<!!>start choices.+$self_name<!!>/) {$on = 1;}
}
}


Und die choices.txt schaut so aus:

<!!>start choices for index.pl<!!>

<stadt>

paris
berlin
venedig
mailand
tokyo
havanna
<#stadt>

<data>

Aa||a
Bb||b
Cc||c
Dd||d
Ee||e
Ff||f
<#data>

<!!>end choices for index.pl<!!>


Vielleicht kann ja einer das script bei sich testen und mir sagen warum das nicht läuft. Wie gesagt auf der Linux Kiste läuft alles bestens!!
Danke im vorraus

[edit by strat]Habe Code-Tags eingefuegt[/edit]\n\n

<!--EDIT|Strat|1071490254-->
havi
 2003-12-15 12:26
#507 #507
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Probier es mal mit chdir("./data")

Du koenntest open(ALT,"<choices.txt") or die $!; schreiben.
Da bekommst du dann naemlich auch die Fehlermeldung von Perl.

Ausserdem empfehle ich dir use warnings; use strict; in jedem Skript einzusetzen.

Gruss
crucho
 2003-12-15 13:38
#508 #508
User since
2003-12-15
9 Artikel
BenutzerIn
[default_avatar]
hi, danke erstmal für die tipps,
hab jetzt erstmal den Pfad geändert auf ../data .
Hab in der Apache error.log nachgeschaut und es treten eigentlich keine fehler auf. Es gibt nur keine Einträge in den Auswahlfeldern.
Vieleicht liegt es einfach nur an der Text-Datei. Kann doch nicht so schwer sein die Einträge aus der choices.txt zu übertragen.
Kann es sein dass es am xampp liegt? schon mal xampp ausprobiert?
Weiss echt nicht mehr weiter...
Strat
 2003-12-15 14:17
#509 #509
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Nein, das liegt nicht an xampp
1. du versuchst, die Datei zu oeffnen, fragst aber nicht auf eventuelle fehler ab. ich vermute mal, dass er die Datei einfach nicht findet. Was kommt bei
Code: (dl )
1
2
3
4
unless (open(ALT,"<choices.txt")) {
print "Konnte Datei 'choices.txt' nicht oeffnen: $!\n";
exit 0;
}

2. wie ist der absolute Pfad zur Datei choices.txt?
3. chdir("/data"); da verwechselst du anscheinend das dateisystem (geht nach c:\data) mit dem web. chdir bezieht sich nicht aufs web, sondern auf das dateisystem von windows. Wirf da besser das chdir raus, und gib beim Dateinamen einen relativen Pfad an, z.B.
Code: (dl )
1
2
3
4
5
6
use FindBin; # $FindBin::Bin enthaelt den pfad zum Script
my $file = "$FindBin::Bin/../data/choices.txt"; # oder was auch immer
unless (open (ALT, $file)) {
print "Fehler: konnte Datei '$file' nicht oeffnen: $!\n";
exit 0;
}
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
crucho
 2003-12-15 14:28
#510 #510
User since
2003-12-15
9 Artikel
BenutzerIn
[default_avatar]
Hab das ja unter xampp laufen. Liegt es vielleicht daran, dass ich das verzeichniss cgi-bin unter htdocs angelegt habe und dementsprechend die httpd.conf geändert habe.

Das hab ich deshalb gemacht weil ich nicht weiss wie ich perl-scripte direct aufrufe wenn das cgi-bin verzeichniss auf der selben ebene liegt wie htdocs ( unter htdocs liegt die index.htm )

http://localhost/cgi-bin/indexneu.pl ( cgi-bin liegt in htdocs-Ordner )

http://localhost/????? ( cgi-bin liegt auf gleicher ebene wie htdocs )

Sorry für die Newbie Fragen??
Strat
 2003-12-15 14:29
#511 #511
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
daran liegt es auch nicht. einfach weiter mit meinen antworten 1-4...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
havi
 2003-12-15 14:38
#512 #512
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Sorry fuer meinen Tip mit chdir. War natuerlich Schwachsinn.
Ich glaube aber das du einfach die Datei nicht offnen kannst (findest).
Der Tip von Strat mit $FindBin ist sicher die beste Loesung.

Achja, entschuldige dich nicht fuer Newbie-Fragen.

Dafuer ist das Board doch da :-)

Gruss
crucho
 2003-12-15 14:49
#513 #513
User since
2003-12-15
9 Artikel
BenutzerIn
[default_avatar]
Danke erstmal!
zu 1. Habe es eingebaut und es kommt keine print ausgabe. Sollte die Datei eigentlich finden, weil ich den Ordner cgi-bin im Ordner htdocs habe. ../data bringt mich dann auf htdocs wo der ordner data mit der choices.txt liegt.

Aber wollte jetzt mal irgendeine Variabe ausgeben mit print:

z.B. der Variable $on wird 1 zugewiesen. Wenn ich jetzt in sub getchoices eine printausgabe eintippe gibt er auch nichts aus:

print "$on\n";

glaub wirlich da stimmt was nicht in xampp :(
crucho
 2003-12-15 15:07
#514 #514
User since
2003-12-15
9 Artikel
BenutzerIn
[default_avatar]
Hab jetzt folgendes gemacht als beweis dass er die Text öffnen kann:

Hab die Zeile geändert :

print "<td width=\"80\" height=\"1\">Select Stadt</td>\n";

für "Select Stadt" hab ich @choices[0] eingefügt und er wirft mir "start choices for index.pl" aus ( 1. Zeile in choices.txt )

für @choices[4] gibt er mir "paris" aus. Geht also!

Kann es nur im Auswahl Feld nicht sehn.

Muß ich dem Auswahl Feld eine gewisse breite angeben damit es die Einträge anzeigt???
Bin nah dran :)
Strat
 2003-12-15 15:08
#515 #515
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
kannst du mir mal schnell die dateien und das script mailen? an pc@fabiani.net
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< |< 1 2 >| >> 19 Einträge, 2 Seiten



View all threads created 2003-12-15 12:13.