Das Lesen und Schreiben von Dateien ist seit dem IIS 4 durch ASP bzw VBScript relativ einfach.
In diesem Workshop zeige ich euch, wie das im Einzelnen funktioniert.
Ich zeige das am Beispiel einer Serverstatistik.
Hier erstmal der Quellcode für die global.asa
<SCRIPT LANGUAGE=\"VBScript\" RUNAT=\"Server\">
Sub Session_onStart()
On Error Resume Next
DIM FSO, TextLog
DIM FileName, TmpDate
DIM SessionStartTime
DIM RemoteHost, FirstPage
DIM Browser
Set FSO = Server.CreateObject(\"Scripting.FileSystemObject\")
FileName = DATE
FileName = Replace(FileName, \".\", \"\")
FileName = Server.MapPath(\"logfiles/\" & FileName & \".log\")
Set TextLog = FSO.OpenTextFile(FileName, 8, TRUE, 0)
SessionStartTime = Time
RemoteIP = Request.ServerVariables(\"REMOTE_ADDR\")
RemoteHost = Request.ServerVariables(\"REMOTE_HOST\")
Firstpage = Request.ServerVariables(\"SCRIPT_NAME\")
Browser = Request.ServerVariables(\"HTTP_USER_AGENT\")
TextLog.WriteLine(\"*** New Session startet at \" & SessionStartTime & \" ***\")
TextLog.WriteLine(\"RemoteHost: \" & RemoteHost)
TextLog.WriteLine(\"RemoteIP: \" & RemoteIP)
TextLog.WriteLine(\"Browser: \" & Browser)
TextLog.WriteLine(\"Starting at Page: \" & FirstPage)
TextLog.Close
Set TextLog = nothing
Set FSO = nothing
End Sub
</script>[/QUOTE]
Und der Quellcode für die Datei die das Logfile ausliest:
[QUOTE]<%
Set FSO = Server.CreateObject(\"Scripting.FileSystemObject\")
FileName = DATE
FileName = Replace(FileName, \".\", \"\")
FileName = Server.MapPath(\"logfiles/\" & FileName & \".log\")
Set TextLog = FSO.OpenTextFile(FileName, 1, TRUE, 0)
While Not TextLog.AtEndOfStream
Response.Write(TextLog.ReadLine & \"<br>\")
Lines = Lines + 1
Wend
TextLog.Close
TotalSessions = Lines / 5
Response.Write(\"<hr>\")
Response.Write(\"Total Sessions this Day: \" & TotalSessions)
%>
Alles anzeigen
Ich gehe den Quelltext jetzt mal Zeile für Zeile durch
GLOBAL.ASA
1. Anfang der Datei
3. Start der Sub Session_onStart
4. Falls ein Fehler auftritt, weitermachen
6. - 10. Deklaration der Variablen
12. Instanziiren des FSO
14. - 16. Dateiname aus dem aktuellen Datum zusammenbasteln
17. Datei zum Schreiben öffnen, wenn sie nicht existiert wird die erstellt. Neue Daten werden am Ende angehängt
19. - 23. Wertzuweisung an die Variablen
25. - 29. Hier werden die Daten in die Datei geschrieben
31. - 33. Objekte schliessen und zurücksetzen
35. Ende der Sub
38. Ende der Datei
Datei zum auslesen
5. - 7. Dateiname zusammenbasteln wie in der GLOBAL.ASA
8. Instanziiren des FSO, öffnen der Datei zum Lesen
10. - 13. Eine Schleife geht jede Zeile der Datei durch und gibt den Inhalt der Zeile aus. Ein Counter wird um 1 erhöht.
14. Sobald das Ende der Datei erreicht ist, schliesse die Datei
15. Die Anzahl der Zeilen in der Datei wird durch 5 geteilt umd die Anzahl der Datensätze rauszukriegen. 5, weil 5 Zeilen zu einem Datensatz gehören
16. Eine Linie zeichnen
17. Ausgabe, wieviele Datensätz in dieser Datei gespeichert sind
Fertig
Diesen Quelltext könnt Ihr 1:1 übernehmen, es muss nur in Zeile 16 der GLOBAL.ASA statt "logfiles/" der entsprechende Pfad angegeben werden. Dieser Ordner muss allerdings schreibrechte haben!
Der Pfad muss auch in Zeile 7 der Auslesedatei angepasst werden.
Was ich mir dabei gedacht habe:
es soll für jeden Tag ein eigenes Logfile angelegt werden, es sollte schneller sein als eine Datenbank, und es sollte einfach zu programmieren sein.
In Zeile 15 der GLOBAL.ASA benutze ich "Replace" um aus dem Datum die Punkte zu entfernen. Ich ersetze den Punkt gegen NIX.
Wenn ich die Datei öffnen will wird sie automatisch neu erstellt, wenn sie noch nicht da ist.
Is doch ganz einfach, oder?
Man kann das schreiben von Dateien zum Beispiel auch dazu nutzen um Formulare zu speichern (ein Gästebuch zum Beipsiel, oder einen Shop)
Wie immer, Fragen hier rein, ich beantworte so schnell wie möglich!