Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 1/2005.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Mit Textdateien arbeiten

André Minhorst, Duisburg

Trotz aller Vorteile von XML und der Möglichkeit von Access, die gängigsten Office- und Fremdformate zu importieren, ist die gute alte Textdatei immer noch nicht ausgestorben. Ganz im Gegenteil: Nichts ist schneller erstellt und nur wenige andere Formate - wenn überhaupt - lassen sich ohne Einbinden zusätzlicher Bibliotheken per VBA erzeugen. Daher erfahren Sie in diesem Beitrag alles, was Sie zum Lesen und Erzeugen von Textdateien wissen müssen.

Textdateien und ASCII

Zum Thema Textdateien gehört unbedingt auch eine kurze Erläuterung des ASCII-Standards.

Textdateien bestehen aus Buchstaben, Zahlen, Sonderzeichen und Steuerzeichen. ASCII legt für jedes dieser Zeichen eine Ganzzahl zur digitalen Darstellung fest. Aufgrund der weltweiten Verbreitung des ASCII-Standard ist auch zu rechnen, dass eine im Textformat gespeicherte Datei überall dort gelesen werden kann, wo es auch Computer gibt.

Für die Darstellung der ASCII-Zeichen wird ein Sieben-Bit-Code benötigt, der 128 Ganzzahlen und damit Zeichen abdeckt. Vor der Einführung von ISO 8859 verwendeten viele Hersteller das achte Bit für eigene Zwecke; dann wurden die dadurch möglichen zusätzlichen 128 Zeichen für regionale Spezialitäten wie etwa für die deutschen Umlaute ä, ö und ü verwendet. Dementsprechend gibt es verschiedene Versionen dieser international gültigen Norm. Verlassen können Sie sich aber definitiv nur auf die ersten 128 Zeichen.

Neben den kleinen (ASCII-Code 97-122) und großen Buchstaben (65-90) und den Zahlen (48-57) sind für uns vor allem die Steuerzeichen interessant. Von den Steuerzeichen dürften vor allem Line Feed (10) und Carriage Return (13) sowie Horizontal Tab (9) bekannt sein.

VBA und ASCII

Unter VBA sind in Zusammenhang mit ASCII zwei Befehle interessant:

Mit ASC ermitteln Sie den ASCII-Code für ein als Parameter übergebenes Zeichen. Die folgende Anweisung gibt beispielsweise den Wert 97 im Testfenster aus:

? ASC("a")

Andersherum lassen sich mit der CHR-Funktion die hinter den Zahlenwerten stehenden Zeichen ermitteln. Die Anweisung

? CHR(65)

ergibt, im Testfenster abgesetzt, beispielsweise die Ausgabe A.

Zugriff vorbereiten

Es gibt mehrere Möglichkeiten für den Zugriff auf eine Textdatei. Sie können Daten lesen, den bestehenden Inhalt überschreiben oder neuen Inhalt an die Datei anhängen.

Bevor eine dieser Aktionen erfolgen kann, müssen Sie die Textdatei für den Zugriff vorbereiten. Dazu dient die Open-Anweisung. Sie erwartet mehrere Parameter, die im Wesentlichen den Dateinamen, die Zugriffsart und eine Dateinummer als Referenz für die folgenden Operationen umfassen. Der für die meisten Zwecke ausreichende Aufbau sieht folgendermaßen aus:

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

Existiert die Datei?

Für den Parameter Pfadname geben Sie den Namen einer existierenden oder der zu erstellenden Datei an. Es ist also keine zusätzliche Anweisung zum Anlegen der Datei erforderlich. Das gilt natürlich nicht, wenn Sie die Datei im Input-Modus öffnen - wie soll man schon aus einer neuen und leeren Datei lesen?

Modus

Im Zusammenhang mit Textdateien sind die drei Modi Append, Input und Output interessant.

Public Function DateiZeichenweiseLesen()

    Dim intFilenumber As Integer

    intFilenumber = FreeFile

    Open "c:\test.txt" For Input As intFilenumber

    Do While Not EOF(intFilenumber)

        Debug.Print Input(1, intFilenumber)

    Loop

    Close intFilenumber

End Function

Quellcode 1

Dateinummer

Die Dateinummer legen Sie einmal beim Öffnen der Datei fest und verweisen bei folgenden Anweisungen auf diese Dateinummer statt auf den Dateinamen.

Da eine statische Zuweisung oft zu Fehlern führt, weil die gleiche Nummer schnell zweimal vergeben wird, verwendet man eine spezielle Funktion, um eine freie Nummer zu finden. Diese Funktion heißt Freefile und gibt die nächste nicht als Dateinummer verwendete Ganzzahl zwischen 1 und 511 aus. Wenn Sie nicht die Freefile-Funktion verwenden, müssen Sie der selbst gewählten Zahl eine Raute (#) voranstellen.

Beispiele für das Öffnen von Dateien

Die folgende Anweisung öffnet eine Datei zum Lesen (mit statischer Dateinummer):

Open "c:\test.txt" For Input As #1

Wenn Sie eine dynamisch ermittelte Dateinummer verwenden und anschließend in weiteren Anweisungen auf diese zugreifen möchten, verwenden Sie folgende Befehlsfolge zum Öffnen einer Datei:

Dim intFilenumber As Integer

intFilenumber = FreeFile

Open "c:\test.txt" For Input _
    As intFilenumber

Aus Textdateien lesen

Zum Lesen von Textdateien stehen mehrere Funktionen zur Verfügung. Sie können Textdateien Zeichen für Zeichen, zeilenweise oder komplett einlesen. Welche Vorgehensweise die richtige ist, hängt von der jeweiligen Anwendung ab.

Hinweis

Um die Beispiele zum Einlesen von Textdateien nachzuvollziehen, muss natürlich erst einmal eine Textdatei vorhanden sein. Diese legen Sie ganz einfach selbst mit dem Texteditor von Windows an. (

Zeichen für Zeichen

Um eine Datei Zeichen für Zeichen einzulesen, verwenden Sie die Input-Funktion mit einem entsprechenden Parameter. Die Funktion aus Quellcode 1 gibt eine per Texteditor erstellte Textdatei mit einem Zeichen je Zeile aus.

Dazu liest eine Anweisung innerhalb einer Schleife nach dem Öffnen der Datei jeweils ein Zeichen der Datei ein. Die Abbruchbedingung enthält eine Funktion namens EOF. Diese Funktion überprüft, ob das Ende der Datei erreicht ist, und gibt in diesem Fall den Wert True zurück.

Public Function DateiZeilenweiseLesen()

    Dim intFilenumber As Integer

    Dim strLine As String

    intFilenumber = FreeFile

    Open "c:\test.txt" For Input As intFilenumber

    Do While Not EOF(intFilenumber)

        Line Input #intFilenumber, strLine

        Debug.Print strLine

    Loop

    Close intFilenumber

End Function

Quellcode 2

Public Function DateiMitFeldernLesen()

    Dim intFilenumber As Integer

    Dim strLine As String

    intFilenumber = FreeFile

    Open "c:\Artikel.txt" For Input As intFilenumber

    Do While Not EOF(intFilenumber)

        Input #intFilenumber, Artikelnummer, _
            Artikelname, Liefereinheit

        Debug.Print Artikelnummer, Artikelname, _
            Liefereinheit

    Loop

    Close intFilenumber

End Function

Quellcode 3

Abb. 1: Textdatei mit durch Kommata getrennten Daten

Zeile für Zeile

Bei der zweiten Variante zum Einlesen einer Textdatei wird jeweils eine komplette Zeile in eine Variable eingelesen.

Quellcode 2 enthält ein Beispiel für die Verwendung der dazu erforderlichen Line Input #-Anweisung. Auch hier erfolgt das Einlesen innerhalb einer Do While-Schleife. Die Schleife enthält je einen Aufruf der Funktion Line Input #.

Die Funktion hat zwei Parameter: Die Dateinummer und eine Variable vom Datentyp String zur Speicherung des jeweiligen Zeileninhalts.

Zu beachten ist hier, dass unmittelbar hinter dem Raute-Zeichen (#) der Funktion die Dateinummer anzugeben ist - also beispielsweise #1 für eine statische Dateinummer oder #intFilenumber für eine dynamisch ermittelte Dateinummer.

Einlesen speziell formatierter
Textdateien

Je nach dem Format der einzulesenden Texte werden diese nach dem Einlesen in einer separaten Funktion ausgewertet und in die gewünschte Form gebracht oder direkt im gewünschten Format eingelesen.

Ein Beispiel für Letzteres sind Dateien, in denen jede Zeile eine feste Anzahl Elemente enthält, die durch ein bestimmtes Zeichen wie beispielsweise ein Komma getrennt sind. Auf diese Art könnte man etwa den Inhalt einer Tabelle leicht in eine Textdatei schreiben, auf einem anderen Rechner wieder einlesen und anschließend direkt weiterverwenden.

Public Function KompletteDateiLesen()

    Dim intFilenumber As Integer

    Dim strText As String

    intFilenumber = FreeFile

    Open "c:\Artikel.txt" For Input As intFilenumber

    strText = Input(LOF(intFilenumber), intFilenumber)

    Debug.Print strText

    Close intFilenumber

End Function

Quellcode 4

Abb. 1 zeigt ein Beispiel für eine Textdatei mit durch Komma voneinander getrennten Daten.

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Verwandte Beiträge:

Textvorlagen mit Daten füllen

© 2003-2015 André Minhorst Alle Rechte vorbehalten.