Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Lesen von Textdateien

Geschrieben von: Christian Koller
Kategorie: ASP Tricks

This printed page brought to you by AlphaSierraPapa

Textdateien kann man in kleinen ASP-Applikationen vielfältig einsetzen. Ob man sie als Speicherplatz für Daten benutzt, oder als Steuerungsdateien für bestimmte Anweisungen.

Um Zugriff auf Textdateien zu erlangen, benutzt man unter ASP das FileSystemObject Objekt. Dieses ist Teil der Scripting Library, die mit VBScript geliefert wird.

Methoden zum Lesen von Textdateien

Um eine Textdatei in einer ASP-Seite lesen zu können, benötigt man nur das FileSystemObject und die zugehörige OpenTextFile Methode. Das folgende Skript öffnet beispielsweise die Datei C:\Testdateien\MeineDatei.txt, speichert den Inhalt in der Textvariable strInhalt, und gibt dann den Inhalt aus:

<%
' +++ Konstanten und Variablen deklarieren
Const fsForReading = 1
Dim strDateiname, strInhalt, strInhaltHTML
Dim objFs           ' FileSystemObject Objekt
Dim objTextStream   ' Textstream Objekt

' +++ Datei, deren Inhalt gelesen wird:
strDateiname = "C:\Testdateien\MeineDatei.txt"

' +++ FileSystemObject anlegen und in fs speichern:
Set objFs = CreateObject("Scripting.FileSystemObject")

' +++ Textstream oeffnen, erlaubt Zugriff auf den Inhalt der Datei
Set objTextStream = objFs.OpenTextFile(strDateiname, fsForReading)

' +++ Gesamten Datei-Inhalt lesen und in strInhalt speichern
strInhalt = objTextStream.ReadAll

' +++ Datei-Inhalt in HTML umwandeln
strInhaltHTML = Server.HTMLEncode(strInhalt)
strInhaltHTML = Replace(strInhaltHTML,vbCrLf,"<BR>" & vbCrLf)
' +++ Datei-Inhalt als HTML formatiert ausgeben
Response.Write strInhaltHTML

' +++ Textstream schliessen
objTextStream.Close
' +++ Resourcen freigeben
Set objTextStream = Nothing
Set objFs = Nothing
%>

Analyse des Skripts: Die Konstante fsForReading erhält den Wert 1 - Sie wird beim Öffnen des TextStreams (Datei-Inhalt) benötigt. Der Variablen strDateiname wird der physikalische Pfad einer Textdatei zugeweisen.

Ein FileSystemObject Objekt wird erstellt und in objFs gespeichert. Durch das FileSystemObject bekommt man Zugriff auf Dateien und Ordner, deren Attribute und Inhalte.

Um auf den Datei-Inhalt der Textdatei zugreifen zu können, benötigt man ein TextStream Objekt. Dieses repräsentiert den Inhalt einer Datei und erlaubt Zugriff auf den Textinhalt der Datei (ähnlich wie ein Recordset Objekt Zugriff auf den Inhalt einer Datenbank erlaubt).

Mittels der ReadAll Methode wird der gesamte Inhalt der Datei gelesen und in der Variable strInhalt gespeichert. Um den Inhalt aus strInhalt HTML-gerecht zu formatieren, verwendet das Skript die Server.HTMLEncode Funktion. Die Replace Funktion bewirkt, daß Zeilenumbrüche durch <BR> ersetzt werden.

Nachdem nun der HTML-formatierte Inhalt der Datei mittels Response.Write ausgegeben wurde, wird der TextStream durch Aufruf der Close Methode geschlossen. Sämtliche vom FileSystemObject und dem TextStream Objekt noch belegten Resourcen werden durch Set Objekt = Nothing freigegeben.

Wenn man eine sehr große Textdatei liest, so kann es zweckmässig sein, nur eine Zeile, oder eine bestimmte Anzahl von Zeichen zu lesen. Dazu öffnet man einen TextStream der Datei, und verwendet statt der ReadAll Methode die Read oder die ReadLine Methode.

Die Read Methode liest eine bestimmte Anzahl von Zeichen aus:

strText = objTextStream.Read(AnzahlBuchstaben)

Um beispielsweise von einer Textdatei jeweils 17 Buchstaben zu lesen, bis der gesamte Inhalt gelesen wurde, geht man wie folgt vor:

...
lngAnz= 17
While Not TextStream.AtEndOfStream 
   Response.Write TextStream.Read(lngAnz)
Wend
...

Die While...Wend Schleife wird solange durchlaufen, bis der gesamte Inhalt zum Browser geschrieben wurde. Die objTextStream Eigenschaft AtEndOfStream liefert TRUE (Wahr), wenn bereits der gesamte Inhalt gelesen wurde.

Die ReadLine Methode arbeitet ähnlich wie die Read Methode. Sie liest eine ganze Zeile aus der Textdatei und übergibt diese Zeile (ohne Zeilenschaltung) als Ergebnis:

strTextZeile = objTextStream.ReadLine

Um nun also die gesamte Datei zeilenweise zu lesen, kann man eine Schleife wie folgt benutzen:

...
While Not TextStream.AtEndOfStream 
   Response.Write TextStream.ReadLine & "<BR>"
Wend
...

Umwandeln eines virtuellen in einen physikalischen Datei-Pfad

Sehr oft kann man in einem ASP-Skript nur den virtuellen Pfad einer Datei angeben. Der virtuelle Pfad /text/datei05.txt verweist auf die Datei namens datei05.txt, die im Unterverzeichnis text der Webserver Root (Website Homedirectory) liegt. Der virtuelle Pfad MeinText.txt hingegen verweist auf die Datei MeinText.txt, die im selben Verzeichnis wie die ASP-Datei liegt.

Um einen virtuellen Pfad in den entsprechenden physikalischen Pfad umzuwandeln, verwendet man die Server.MapPath Funktion:

strVirtPfad = "/text/datei05.txt"
strPhysPfad = Server.MapPath(strVirtPfad)

Spezialfall: Um den virtuellen Pfad der ASP-Datei selbst herauszufinden, benutzt man die folgende Funktion:

strVirtPfadSelbst = Request.ServerVariables("SCRIPT_NAME")

Letztendlich sind auch ASP- und HTML-Dateien nichts anderes als Textdateien, die man aus einer ASP-Seite heraus lesen, ändern, oder neu schreiben kann.

Schlußbemerkung

Man kann nicht nur Textdateien lesen, sondern aus ASP heraus auch den Inhalt von Dateien überschreiben, neue Textdateien anlegen, oder Text an den Inhalt einer Datei anfügen. Dies wird in einem weiterem Artikel ausführlich behandelt werden.

This printed page brought to you by AlphaSierraPapa

Verwandte Artikel

Dateiattribute unter ASP auslesen
http:/www.aspheute.com/artikel/20000523.htm
Dateizugriff auf Netzlaufwerken
http:/www.aspheute.com/artikel/20010508.htm
INI-Dateien als Konfigurationsdateien für ASP-Anwendungen verwenden
http:/www.aspheute.com/artikel/20001129.htm
Logfiles mit Access auswerten
http:/www.aspheute.com/artikel/20010502.htm
Schreiben einer Textdatei auf den Server
http:/www.aspheute.com/artikel/20000725.htm
Streams in NTFS Dateien
http:/www.aspheute.com/artikel/20000821.htm

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.