File von anderem Verzeichnis auslesen ?
xNeTworKx
- perl
0 Cheatah0 xNeTworKx
Hallo,
ich hab gestern schon so was ähnliches gefragt, aber es geht jetzt darum ,daß ich Textdateien von einem anderen Verzeichnis auslesen will, aber es funktioniert leider nicht, weil er die Files nicht auslesen kann so wie es scheint. Ich bekomme keine Fehlermeldung, aber nur einen weißen Bildschirm.
Ich habe zur Probe 2 Scripts gemacht um zu checken, ob vielleicht der reguläre Ausdruck oder das Verzeichnis oder sonst etwas falsch is, aber er findet die Dateien. Nur gibt er mir den Inhalt nicht aus. Jetzt hab ich mich gefragt ob das überhaupt so funktioniert ?
Hier das Script das beweist, daß er die Dateien findet.
#!/usr/bin/perl -w
$verzeichnis = "test";
print "Content-type:text/html\n\n";
opendir(DIR, "$verzeichnis") or die "Verzeichnis kann nicht geoeffnet werden : $!\n";
while ($file = readdir(DIR)) {
if ($file =~ /text\d+.txt/) {
push @dateien, $file."\n";
}
}
closedir DIR;
print @dateien;
Aber wenn ich mit open die gefundenen Verzeichnisse öffnen will tut er gar nichts ?
#!/usr/bin/perl -w
@dateien = "";
@dateiinhalt = "";
$verzeichnis = "test";
print "Content-type:text/html\n\n";
opendir(DIR, "$verzeichnis") or die "Verzeichnis kann nicht geoeffnet werden : $!\n";
while ($file = readdir(DIR)) {
if ($file =~ /text\d+.txt/) {
open (DATEI,"$file") or die "Konnte $file nicht oeffnen : $!\n";
@dateiinhalt = <DATEI>;
@dateiinhalt = reverse @dateiinhalt;
($letzte_zeile, @textdaten) = @dateiinhalt;
@textdaten = reverse @textdaten;
foreach $zeile(@textdaten) {
$zeile =~ s/\n/<br>/;
print "$zeile\n";
}
print "$letzte_zeile<br>\n";
print '*' x 20, "<br>\n";
close DATEI;
}
}
closedir DIR;
Meiner Meinung nach is das Script korrekt, die Frage is nur ob es überhaupt möglich is. Ich hoffe jemand kann mir helfen, danke.
Hi,
#!/usr/bin/perl -w
Du solltest unbedingt noch
use strict;
in Deine Scripts einbauen und anschließend Deine Fehler korrigieren. Als Beispiel:
$verzeichnis = "test";
my $verzeichnis = 'test';
print "Content-type:text/html\n\n";
Das lässt auf einen CGI-Kontext schließen. In diesen ist der Begriff "aktuelles Verzeichnis" vollkommen undefiniert; Dein Verzeichnis "test" kann sonstwo gesucht werden. Benutze absolute Pfade.
opendir(DIR, "$verzeichnis") or die "Verzeichnis kann nicht geoeffnet werden : $!\n";
perldoc perlfaq4, What's wrong with always quoting "$vars"?
push @dateien, $file."\n";
Öh... was willst Du mit dem Newline, sprich! Käseschneiden vermutlich nich :-)
@dateien = "";
Dann hat Dein Array bereits ein (leeres) Element.
opendir(DIR, "$verzeichnis") or die "Verzeichnis kann nicht geoeffnet werden : $!\n";
[...]
open (DATEI,"$file") or die "Konnte $file nicht oeffnen : $!\n";
Und in welchem Verzeichnis wird $file Deiner Meinung nach gesucht?
Meiner Meinung nach is das Script korrekt,
Meiner Meinung nach nicht :-)
die Frage is nur ob es überhaupt möglich is.
Ja, selbstverständlich. Das ist eine Standard-Aufgabe.
Cheatah
Hi,
es geht nicht darum ob er das Verzeichnis findet oder nicht, (er findet es ja) nur kann ich die gefundenen Files nicht auslesen, und das ist das Problem. Ich weis eben nicht ob das Script aus dem Verzeichnis heraus die Dateien öffnen will, oder ob es aus diesem Verzeichnis wo sich das Script befindet(wo sich die Textdateien nicht sind) die Dateien öffnen will.
ich versteh das eben nicht, weil das Ganze doch in einer Schleife passiert zwischen opendir und closedir, somit hat ja das Script eigentlich "Verbindung" zum Verzeichnis, wenn ich das mal so sagen darf.
Ich wäre für weitere Vorschläge dankbar.
Hallo,
es geht nicht darum ob er das Verzeichnis findet oder nicht, (er findet es ja) nur kann ich die gefundenen Files nicht auslesen, und das ist das Problem. Ich weis eben nicht ob das Script aus dem Verzeichnis heraus die Dateien öffnen will, oder ob es aus diesem Verzeichnis wo sich das Script befindet(wo sich die Textdateien nicht sind) die Dateien öffnen will.
ich versteh das eben nicht, weil das Ganze doch in einer Schleife passiert zwischen opendir und closedir, somit hat ja das Script eigentlich "Verbindung" zum Verzeichnis, wenn ich das mal so sagen darf.
Ich wäre für weitere Vorschläge dankbar.
Nur nicht die Nerven wegschmeissen;-)
Abgesehen von den Anregungen, die Cheatah Dir gegeben hat, solltest Du auch weiter systematisch den "Fehler" äh 'Fehler' suchen.
Du machst ja eine Fehlerausgabe bei
open (DATEI,"$file") or die "Konnte $file nicht oeffnen : $!\n";
Was kommt da raus.
Ich schätze mal:
Konnte text1.txt nicht oeffnen : No such file or directory
Wie auch, den Namen hats Du durch ein Einlesen des Verzeichnisses $verzeichnis, öffnen willst Du die Datei aber im aktuellen Verzeichnis. Das kann nur funktionieren, wenn $verzeichnis '.' als Inhalt hat;-)
versuchs mal mit
open (DATEI,"$verzeichnis/$file") or die "Konnte $file nicht oeffnen : $!\n";
Grüße
Klaus
open (DATEI,"$verzeichnis/$file") or die "Konnte $file nicht oeffnen : $!\n";
Mein Gott, es funktioniert =)
Vielen Dank ! =)