Textdateien schreiben und lesen

VBA bietet einige einfache Methoden, um Textdateien zu erstellen, diese mit Texten zu füllen und auch die enthaltenen Texte zu lesen. Dieser Artikel stellt diese Methoden vor und erläutert, wie Sie eine Datei komplett oder zeilenweise lesen, wie Sie neue Dateien erstellen und mit Texten füllen oder Texte zu bestehenden Dateien hinzufügen.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank <b>1206_Textdateien.mdb</b>.

Wozu Textdateien verwenden

Auch wenn Sie mit Access auf strukturierte Dokumenttypen wie XML-Dokumente oder die Office-Dateitypen zugreifen können, hat die gute alte Textdatei dennoch ihre Berechtigung. Immerhin gibt es noch zahlreiche Anwendungen, die Ihre Daten beispielsweise zeilenweise im CSV-Format ausgeben – und dies lässt sich prima mit den Methoden zum Einlesen von Textdateien auswerten. Aus dem gleichen Grund ist auch das Erstellen und Beschreiben von Textdateien noch längst nicht aus der Mode gekommen.

Inhalt von Textdateien

Textdateien speichern in der Regel Buchstaben, Zahlen, Sonderzeichen und Steuerzeichen. ASCII legt für jedes dieser Zeichen eine Ganzzahl zur digitalen Darstellung fest. Da der ASCII-Standard weltweit verbreitet ist, kann man auch damit rechnen, dass eine im Textformat gespeicherte Datei überall dort gelesen werden kann, wo es auch Computer gibt.

Ein ASCII-Zeichen benötigt ein Byte Speicherplatz in der Textdatei. Mit einem Byte lassen sich Zahlen von 0 bis 255 darstellen. Die ersten 128 decken einen Standardzeichensatz ab, die übrigen stehen für Sonderzeichen und länderspezifische Zeichen wie etwa die deutschen Umlaute.

Kleine Buchstaben belegen die ASCII-Codes 97-122, große Buchstaben die Codes 65-90. Die Zahlen finden sich in den Codes 48-57.

Textdateien mit und ohne Zeilenumbruch

Es gibt zwei Möglichkeiten, Daten in einer Textdatei zu speichern: in Zeilen, die durch spezielle Steuerzeichen voneinander getrennt werden und in Zeilen fester Zeichenlänge. Im ersten Fall geben die beiden Zeichen <b>Line Feed </b>(<b>10</b>) und <b>Carriage Return </b>(<b>13</b>) den Zeilenumbruch an, im zweiten Fall wird jede Zeile bis zur angegebenen Zeichenanzahl aufgefüllt. Dieser Artikel stellt die Methoden zur ersten Variante vor.

Datei vorbereiten

Für die unterschiedlichen Zugriffsarten auf eine Textdatei gibt es verschiedene Parameter. Wie behandeln die folgenden Möglichkeiten:

  • Schreiben in eine neue Datei
  • Schreiben in eine vorhandene Datei
  • Lesen aus einer Datei

Die Vorbereitung der Datei, also das öffnen oder Anlegen, übernimmt in allen Fällen die <b>Open</b>-Anweisung. Die grundlegende Syntax sieht wie folgt aus:

Open <Pfadname> For <Modus> As <Dateinummer>

Angeben des Dateinamens

Sie können entweder den kompletten Dateinamen inklusive Laufwerk und Pfad angeben oder nur einen Dateinamen. Der erste Fall ist klar, im zweiten Fall ergänzt Access die Datei um das aktuelle, mit der Funktion <b>CurDir </b>auszulesende und mit <b>ChDir </b>zu setzende Verzeichnis (siehe auch Artikel <b>Dateibefehle</b>).

Je nach öffnungsmodus muss die Datei bereits vorhanden sein (<b>Output</b>), anderenfalls wird diese gegebenenfalls beim öffnen erstellt (<b>Input</b>, <b>Append</b>).

öffnungsmodus

In Zusammenhang mit Textdateien gibt es drei verschiedene Modi zum öffnen einer Datei:

  • <b>Append</b>: öffnet oder erstellt eine Datei zum Anhängen weiterer Inhalte
  • <b>Input</b>: öffnet oder erstellt eine Datei und fügt Inhalte ein, vorhandene Inhalte werden gelöscht
  • <b>Output</b>: öffnet eine bestehende Datei und bereitet diese zum Lesen der Inhalte vor.

Output und Input – wie soll man sich das merken Ganz einfach: Gehen Sie immer von der VBA-Prozedur aus, die auf die Datei zugreift.

Liest diese die Daten aus der Textdatei ein, verwenden Sie den <b>Input</b>-Modus (Daten fließen zur Prozedur), sonst den <b>Output</b>-Modus (Daten fließen zur Datei).

Dateinummer

üblicherweise gibt man als Dateinummer einfach den Wert <b>#1 </b>an. Dies kann jedoch in die Hose gehen, wenn die gleiche Access-Instanz an anderer Stelle bereits eine Datei mit dieser Nummer geöffnet hat.

Wenn es verschiedene Prozeduren innerhalb einer Anwendung gibt, die Dateien öffnen und bei denen es vorkommen kann, dass die eine Datei noch offen ist, während eine andere geöffnet werden soll, können Sie für jeden Ort innerhalb der Datenbank eine andere Dateinummer angeben, also <b>#1</b>, <b>#2 </b>und so weiter.

Noch einfacher geht es, wenn Sie die Funktion FreeFile nutzen, um sich eine aktuell freie Dateinummer geben zu lassen. Normalerweise gibt <b>FreeFile</b> die kleinste verfügbare Dateinummer zurück, was sich einfach im Direktfenster prüfen lässt:

Debug.Print FreeFile
 1 

Ob diese Funktion funktioniert, können Sie prüfen, indem Sie zuvor eine Datei mit der Nummer <b>1 </b>öffnen und dann nochmals <b>FreeFile </b>im Direktfenster aufrufen (siehe Bild 1).

Aufruf von FreeFile während bereits eine Datei geöffnet ist

Bild 1: Aufruf von FreeFile während bereits eine Datei geöffnet ist

Wozu benötigen Sie nun eine solche Dateinummer Nun: Sie vergeben diese beim öffnen oder Anlegen der Datei und müssen diese auch beiden folgenden Operationen angeben, damit VBA weiß, aus welcher Datei Daten gelesen oder in welche Datei Daten geschrieben werden sollen.

Wir schauen uns an einem einfachen Beispiel an, wie eine feste Dateinummer im Vergleich zu einer per <b>FreeFile </b>ermittelten Dateinummer eingesetzt wird.

Die folgende kleine Prozedur öffnet eine Datei zum Beschreiben und trägt eine Zeile mit Text ein. Dabei wird in jeder Anweisung die #1 als Dateinummer für den Zugriff verwendet:

Public Sub TextdateiErstellenUndSchreiben()
     Open CurrentProject.Path & "\test.txt" _
         For Output As #1
     Print #1, "Hallo"
     Close #1
End Sub

Mit der <b>FreeFile</b>-Funktion benötigen Sie eine Variable, welche die Dateinummer speichert, um diese für alle Zugriffe bereitzustellen – hier <b>intFile </b>genannt. Dieser Variablen weisen Sie den Wert der Funktion <b>FreeFile </b>zu, also beispielsweise die Zahl <b>2</b>. In den folgenden drei Anweisungen wird statt <b>1 </b>der Variablenname <b>intFile </b>angegeben:

Public Sub TextdateiErstellenUndSchreiben_FreeFile()
     Dim intFile As Integer
     intFile = FreeFile
     Open CurrentProject.Path & "\test.txt" For _
         Output As #intFile
     Print #intFile, "Hallo"
     Close #intFile
End Sub

Sie können an allen drei Stellen das Raute-Zeichen beibehalten, aber Sie müssen es mit der <b>Print</b>-Anweisung verwenden – anderenfalls löst dies einen Fehler aus.

Damit haben Sie gleichzeitig schon eine einfache Variante zum Schreiben einer Zeile Text in eine Textdatei kennengelernt.

Lesen einer kompletten Textdatei

Wenn Sie den kompletten Inhalt einer Textdatei in eine Variable einlesen möchten, verwenden Sie eine Prozedur wie die folgende:

Public Sub TextdateiLesen()
     Dim strText As String
     Dim lngAnzahlZeichen As Long
     Open CurrentProject.Path & "\test.txt" _
         For Input As #1
     lngAnzahlZeichen = LOF(1)
     strText = Input(lngAnzahlZeichen, #1)
     Debug.Print strText
     Close #1
End Sub

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar