Ich stehe auf dem Schlauch
Martin Jung
- perl
0 Cheatah0 Martin Jung0 Frank Schönmann0 Cheatah0 Calocybe
Hi Folks,
das Problem ist - immer noch - vollkomen banal.
Nämlich eine einfache Abfrage, ob eine Datei in einem Verzeichnis bereits existiert.
Mit der vereinten Hilfe von "Calocybe" und "Cheetah" dachte ich, das Problem bereits gelöst zu haben. Denkste - nur Theorie.
Die Praxis:
######Perl code#######
sub new_file {
print $htmlfile;
opendir(DIR,$htmldir); #dir enthält zwei Dateien, s.u.
while($datei = readdir(DIR)) { print $datei."\n" }
if (-e $htmlfile) {print "Datei vorhanden"; }
else { print "Datei nicht vorhanden"; }
closedir(DIR);
}
######Bildschirmausgabe#######
Uhr3.html. .. Uhr3.html Uhr2.html Datei nicht vorhanden
warum wird die if-Abfrage nicht durchgeführt bzw. unkorrekt durchgeführt??
Wenn ich auf opendir/closedir verzichte und die Datei in der if-Abfrage über den gesamten Pfad $htmldir/$htmlfile anspreche, funktioniert es auch nicht.
Mir fällt der Fehler einfach nicht auf!
Grüsse, Martin
Hi,
Mit der vereinten Hilfe von "Calocybe" und "Cheetah" dachte ich, das Problem bereits gelöst zu haben. Denkste - nur Theorie.
"Cheatah", bitte ;-)
Wenn ich auf opendir/closedir verzichte und die Datei in der if-Abfrage über den gesamten Pfad $htmldir/$htmlfile anspreche, funktioniert es auch nicht.
Mir fällt der Fehler einfach nicht auf!
Kann ich mir auch nicht erklären. Höchstens, daß der Pfad irgendwie doch nicht so ganz stimmt. Ändere doch mal leicht:
while ($datei = readdir(DIR)) { print "$htmldir/$datei<BR>\n"; }
if (-e "$htmldir/$htmlfile") { print "<BR>$htmldir/$htmlfile existiert.\n"; }
else { print "<BR>$htmldir/$htmlfile ist nicht vorhanden.\n"; }
Bitte die komplette Bildschirmausgabe, und wenn irgendwo am Anfang ein "/" fehlt, haben wir den schuldigen ;-)
Cheatah
Hi Cheatah!!!
"Cheatah", bitte ;-)
uups, siehe oben ;-)
if (-e "$htmldir/$htmlfile") { print "<BR>$htmldir/$htmlfile existiert.\n"; }
else { print "<BR>$htmldir/$htmlfile ist nicht vorhanden.\n"; }Bitte die komplette Bildschirmausgabe>
wie folgt:
i:/HTML/Web Site Hell/test/Uhr3.html existiert
ES FUNKTIONIERT!! Waren es also bloss die Gänsefüsschen..(DAS hatte ich noch nicht probiert, weil es in keiner der Docs so stand - wieder etwas gelernt!)
Fortsetzung blöde Fragen:
Warum ein <BR> im Perl-Code?
Eigentlich dachte ich ja, "\n" wäre ein Zeilenvorschub in Perl. Bei mir wirkt es aber, wie ein " "
Vielen Dank!!!
Grüsse, Martin
hi!
Warum ein <BR> im Perl-Code?
Eigentlich dachte ich ja, "\n" wäre ein Zeilenvorschub in Perl. Bei mir wirkt es aber, wie ein " "
In Perl ist es auch ein Zeilenvorschub, in HTML aber nicht.
bye, Frank!
Hi,
i:/HTML/Web Site Hell/test/Uhr3.html existiert
ES FUNKTIONIERT!! Waren es also bloss die Gänsefüsschen..(DAS hatte ich noch nicht probiert, weil es in keiner der Docs so stand - wieder etwas gelernt!)
oops... es waren wohl eher die Leerzeichen, schätze ich! Damit habe ich selbst nicht gerechnet, weil kein vernünftiger Mensch Parametertrennzeichen in Dateinamen benutzt... *g* ;-)
Warum ein <BR> im Perl-Code?
Weil es nur im HTML-Code steht, den Du ausgibst. Aus Deiner vorherigen Bildschirmausgabe schloß ich, daß Du text/html statt text/plain ausgegeben hast, sonst wäre bei jedem \n nämlich ein Umbruch gewesen. Drum habe ich den üblichen HTML-Befehl für einen Umbruch benutzt.
Eigentlich dachte ich ja, "\n" wäre ein Zeilenvorschub in Perl.
Ist auch korrekt. Wenn Du in den Quellcode der Ausgabe schaust, siehst Du auch jedes Mal einen Umbruch - und bei meiner Version ein <BR>, das den Browser dazu veranlaßt, auch ins Browserfenster einen Umbruch zu schreiben.
Unterscheide einfach Dein Perl-Script von dem, was der Browser am Ende erhält ;-)
Cheatah
Hi Cheatah,
oops... es waren wohl eher die Leerzeichen, schätze ich! Damit habe ich selbst nicht gerechnet, weil kein vernünftiger Mensch Parametertrennzeichen in Dateinamen benutzt... *g* ;-)
»»
Hehe, ich habe niemals behauptet, ich sei vernünftig!! ;-))
Aber bei "WebSiteHell" geht es trotzdem nur mit Gänsefuss - gibt aber schlimmeres ;-)
Weil es nur im HTML-Code steht, den Du ausgibst. Aus Deiner vorherigen Bildschirmausgabe schloß ich, daß Du text/html statt text/plain ausgegeben hast, sonst wäre bei jedem \n nämlich ein Umbruch gewesen. Drum habe ich den üblichen HTML-Befehl für einen Umbruch benutzt.
»»
OK, ich denke, es ist höchste Zeit für das "Kochbuch"!!!!
Danke nochmal, war sehr hilfreich!
Grüsse und gute Nacht, Martin
Hi!
Martin's Version:
if (-e $htmlfile) {print "Datei vorhanden"; }
else { print "Datei nicht vorhanden"; }
Cheatah's Version:
if (-e "$htmldir/$htmlfile") { print "<BR>$htmldir/$htmlfile existiert.\n"; }
else { print "<BR>$htmldir/$htmlfile ist nicht vorhanden.\n"; }
ES FUNKTIONIERT!! Waren es also bloss die Gänsefüsschen..(DAS hatte ich noch nicht probiert, weil es in keiner der Docs so stand - wieder etwas gelernt!)
Das glaube ich nicht. Die Gaensefuesschen waeren in Deiner Version eigentlich ziemlich wurscht gewesen. Nur bei Cheatah's Version nicht, da sind sie fuer die Perl-Syntax noetig, da er zwei Variablen und das /-Zeichen zusammengefuegt hat. Er haette aber auch schreiben koennen
if (-e $htmldir.'/'.$htmlfile) ...
Der imho ausschlaggebende Unterschied ist, dass Cheatah das Verzeichnis mit genannt hat. Schreibt man nur
if (-e $htmlfile), so wird die Datei *im aktuellen Verzeichnis* gesucht. Bei
if (-e $htmldir.'/'.$htmlfile) wird dagegen die Datei in $htmldir gesucht (welches seinerseits auch wieder eine absolute oder eine relative Angabe sein kann). Nur wenn $htmldir zufaellig das aktuelle Verzeichnis ist, liefern beide Abfragen dasselbe Ergebnis.
Um herauszufinden, welches das aktuelle Verziechnis ist, fuehre man auf einem UNIX-System
print pwd
;
aus, auf einem DOS/Win32-System aber
print cd
;
Falls ein Script, das letztere Zeile enthaelt, unter Windows nicht von der Kommandozeile aus gestartet, sondern unter Microsoft's Spielzeug-Server (IIS4) ausgefuehrt wird, kann es aber Probleme geben. Siehe dazu <../../sfarchiv/1999_2/t03170.htm>.
So, ich hoffe ich hab Cheatah jetzt ueberall richtig geschrieben. Wir machen's den Leuten ja auch nicht gerade leicht mit unseren Pseudos. ;-)
Calocybe