Homepage Inspire-world | Forum
CGI/Perl Workshops Dateihandling aller Art

 Inhaltsverzeichnis/Codeschnipsel Übersichtsseite/Dateihandling aller Art

1. Datei auslesen, normale Datei mit mehreren Zeilen
2. Datei auslesen, normale Datei mit Trennzeichen für den Datensatz
2.1 Datei auslesen, mehrere Zeilen, normale Datei mit Trennzeichen für den Datensatz
3. Datei schreiben/überschreiben, normale Datei ohne Trennzeichen für den Datensatz
4. Datei schreiben/Daten anhängen, normale Datei mit Trennzeichen für den Datensatz
5. HTML-Datei anlegen und CHMOD setzen
6. Leere Datei anlegen und CHMOD setzen
7. Eine Datei Löschen
8. Alle Dateien eines Verzeichnisses löschen
9. CHMOD setzen auf alle Dateien eines Verzeichnisses
10. Ein Verzeichnis anlegen
11. Ein Verzeichnis löschen
12. Daten per Query String übermitteln
13. Letzte Zeile einer Datei auslesen


Codeschnipsel zum Dateihandling
Hier werde ich verschiedene Beispielroutinen auflisten die man mit mehr oder weniger Aufwand schnell einsetzen kann. Beispiele und weiterführende Erklärungen gibt es dann in den jeweiligen Workshops.

1. Datei auslesen, normale Datei mit mehreren Zeilen

open (DATEI, "<$dateipfad/meintext.txt");
flock (DATEI, 2);
@meintext = <DATEI>;
close DATEI;
Ausgabe der Datei:
print "Content-type: text/html\n\n";
print "@meintext\n";
Top
2. Datei auslesen, normale Datei mit Trennzeichen für den Datensatz

Hinweis! Hier wird von einer Zeile in der Datei ausgegangen
open (DAT, "<$dateipfad/daten.dat");
flock (DAT, 2);
$linie=<DAT>;
close DAT;

($id,$url,$datum,$email)= split(/\|/,$linie);

Ausgabe der Datei:
print "Content-type: text/html\n\n";
print "$id\n";
print "$url\n";
print "$datum\n";
print "$email\n";
Das ganze kann natürlich auch in anderen Arten formatiert werden.

Top

2.1 Datei auslesen, mehrere Zeilen, normale Datei mit Trennzeichen für den Datensatz

open (DAT,"<daten.dat");
flock (DAT, 2);
@DATEI=<DAT>;
close (DAT);

print "Content-type: text/html\n\n";

print "<table border=\"1\">";

foreach $eintraege (@DATEI){
chomp($eintraege);
($id,$url,$datum,$email)=split(/\|/,$eintraege);
print "<tr><td>$id</td><td>$url</td><td>$datum</td><td>$email</td></tr>\n";
}

print "</table>";

Top
3. Datei schreiben/überschreiben, normale Datei ohne Trennzeichen für den Datensatz

open (FILE, ">$dateipfad/daten.dat");
flock (FILE, 2);
print FILE "Der Text der in der Datei gespeichert wird.";
close FILE;
oder
open (FILE, ">$dateipfad/daten.dat");
flock (FILE, 2);
print FILE "$meintext";
close FILE;
Top
4. Datei schreiben/Daten anhängen, normale Datei mit Trennzeichen für den Datensatz

open (FILE, ">>$dateipfad/daten.dat");
flock (FILE, 2);
print FILE "Der Text der in der Datei gespeichert wird.|Weiterer Text\n";
close FILE;
oder
open (FILE, ">>$dateipfad/daten.dat");
flock (FILE, 2);
print FILE "$email|$url|$name\n";
close FILE;
Top
5. HTML-Datei anlegen und CHMOD setzen

open(INDEX_DATEI, ">$userverz/userdaten/index.html");
print INDEX_DATEI<<HTML_CODE;
<HTML>
<HEADER><TITLE>Zugriff verweigert</TITLE>
</HEADER>
<BODY BGCOLOR="WHITE" TEXT="BLACK">
<font face="arial, helvetica" size=2>
Dateiinhalte...
</BODY>
</HTML>
HTML_CODE
close INDEX_DATEI;
chmod(0666, "$userverz/userdaten/index.html");
Top
6. Leere Datei anlegen und CHMOD setzen

open(DATEI, ">$userverz/daten.dat");
close DATEI;
chmod(0666, "$userverz/daten.dat");
Top
7. Datei löschen

unlink("$userverz/daten.dat");
Top
8. Alle Dateien eines Verzeichnisses löschen

opendir(DIR,"$datenpfad/Daten");
@files=readdir(DIR);
closedir(DIR);
foreach(@files){
unlink("$datenpfad/Daten/$_");
}
Top
9. CHMOD setzen auf alle Dateien eines Verzeichnisses

opendir(DIR,"$datenpfad/Daten");
@files=readdir(DIR);
closedir(DIR);
foreach(@files){
chmod(0777, "$userverz/$_");
}
Top
10. Ein Verzeichnis anlegen

mkdir("$datenpfad/Verzeichnis");
MERKE! Erst Verzeichnis anlegen, dann Dateien erzeugen

Top
11. Ein Verzeichnis löschen

rmdir("$datenpfad/Verzeichnis");
MERKE! Erst Dateien alle löschen aus Verzeichnis, dann Verzeichnis löschen

Top
12. Daten per Query String übermitteln

Mitunter werden Daten auch als Query String an die URL angehängt übermittelt. Hier ein Beispiel wie diese dann wieder ausgelesen und dargestellt werden können.
#!/usr/bin/perl

use CGI::Carp qw(fatalsToBrowser);

@wertepaare = split(/&/, $ENV{'QUERY_STRING'});
foreach $wertepaar (@wertepaare)
{
    ($name, $value) = split(/=/, $wertepaar);
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $value =~ s/~!/ ~!/g;
    $value =~ s/\|/%7C/g;
    $FORM{$name} = $value;
}

print "Content-type: text/html\n\n";

print qq~
Aus dem Query String der URL wurden folgende Werte ermittelt:<br>
Name: $FORM{'name'}<br>
Email: $FORM{'email'}<br>
Datum: $FORM{'datum'}<br>
~;
Zum testen kann man das komplette Script abspeichern und einmal mit so einem Link aufrufen:

http://www.ihredomain.de/cgi-bin/query.pl?name=Max Mustermann&email=webmaster@ihredomain.de&datum=3.6.2002

Hinweise!
Ein Query String ist der Abschnitt der nach dem ? kommt.
Die einzelnen Abschnitte werden mit &name=wert getrennt.
Es ist nicht möglich riesige Dateiinhalte so zu übermitteln.

Top
13. Letzte Zeile einer Datei auslesen

Mitunter werden Daten auch als Query String an die URL angehängt übermittelt. Hier ein Beispiel wie diese dann wieder ausgelesen und dargestellt werden können.
# letzte Zeile einer Datei auslesen
open (DATEI, "<cat.txt");
@data = <DATEI>;
close (DATEI);
print "@data[-1]";
- 1 deshalb weil bei den meisten Dateien am Ende ein Zeilenumbruch steht.

Top


 Zum Inhaltsverzeichnis/Codeschnipsel Übersichtsseite/Dateihandling aller Art
Autor: Helmut Walter Homepage Inspire-world Fragen, Anregungen und Hinweise bitte in das Forum

Valid HTML 4.0! Valid CSS!