Die Community zu .NET und Classic VB.
Menü

Umgang mit Textdateien

 von 

Übersicht 

Der vorliegende Artikel umfaßt ingesamt 17 DinA4-Seiten und ist in drei große Teile geliedert. Hier der Erste zum Thema Textdateien, weitere folgen. An dieser Stelle möchte ich noch einmal Markus Zeichner danken, der sich ehemals die große Mühe machte zu diesem, immer wieder Fragen aufwerfenden, Thema eine Übersicht zu verfassen um sie hier frei zur Verfügung zu stellen.

Mit freundlichen Grüßen
i.A. Götz Reinecke

Befehlsübersicht  

Zuerst eine Auflistung einige Dateifunktionen [Befehle] und dessen kurze Beschreibung:

Befehl Beschreibung
FreeFile Liefert eine freie Dateinummer. Eine Dateinummer benötigt man beim öffnen eine Datei um den Datenkanal später eindeutig identifizieren können. Jede Dateioperation auf die Datei bezieht sich dann auf die Dateinummer.
Open Öffnet eine Datei und ordnet ihr eine Dateinummer zu.
Print Schreibt in eine Textdatei.
Write Schreibt in eine Textdatei. Im Gegensatz zur Print-Anweisung fügt die Write-Anweisung beim Schreiben in die Datei Kommas zwischen Elementen und Anführungszeichen eingeschlossener Zeichenfolgen ein.
Input Liest aus eine Textdatei.
Line Input Liest eine Zeile aus eine Textdatei.
Get Liest Random- oder Binärdateien.
Put Schreibt in Random- oder Binärdateien.
Seek Setzt die Position des Datenzeigers.
EOF Signalisiert das Dateiende. EOF gibt True zurück wenn sich der Datenzeiger am Dateiende befindet.
LOC Gibt die aktuelle Position des Datenzeigers.
LOF Gibt die Größe eine geöffneten Datei in Bytes zurück.
Reset Schließt alle !!! geöffneten Dateien
Close Schließt eine oder mehrere geöffnete Dateien.
CurDir Liefert den aktuellen Verzeichnis-Pfad.
ChDir Wechselt das Verzeichnis.
ChDrive Wechselt das Laufwerk.
MkDir Erstellt ein neues Verzeichnis.
RmDir Löscht ein Verzeichnis
Kill Löscht eine Datei unwiederuflich (VORSICHT !!!)
FileCopy Kopiert eine Datei.
Name Benennt eine Datei oder ein Verzeichnis um.
FileAttr Gibt den Zugriffsmodus für eine mit der Open-Anweisung geöffnete Dateien zurück. Möglich sind:
  • Input
  • 1
  • Output
  • 2
  • Random
  • 4
  • Append
  • 8
  • Binary
  • 32
    FileDateTime gibt den Tag und die Uhrzeit der Erstellung bzw. der letzten Änderung der Datei oder des Verzeichnisses.
    GetAttr liefert die Attribute einer Datei oder eines Verzeichnisses. Möglich sind:
  • vbNormal
  • 0 Normal
  • vbReadOnly
  • 1 Schreibgeschützt
  • vbHidden
  • 2 Versteckt
  • vbSystem
  • 4 Systemdatei
  • vbDirectory
  • 16 Verzeichnis oder Ordner
  • vbArchive
  • 32 Datei wurde seit dem letzten Sichern geändert
    SetAttr Legt die Attribute für eine Datei fest (siehe GetAttr).
    FileLen Liefert die Dateigröße einer ungeöffneten Datei in Bytes.

    Der Zugriff auf Dateien  

    Da Windows ein Multitasking-Betriebssystem ist muss man vor dem öffnen eine Datei darüber nachdenken wie man eine Datei öffnen und welche Rechte andere Programme an der geöffneten Datei haben sollen. Man kann beim öffne eine Datei das Verhalten der Datei gegenüber anderen Anwendungen festlegen. Dabei gibt es folgende Möglichkeiten:

    Modus Beschreibung
    Shared Jeder andere Prozess hat Schreib und Leserechte für diese Datei.
    Locked Die Datei kann durch andere Anwendungen nicht gelesen werden.
    Read Andere Anwendungen haben kein Schreibrecht in die Datei.
    Lock Write Andere Anwendungen haben keine Schreib- und keine Leserechte für die Datei. [Default].

    Voraussetzung für die Zugriffsmodi ist das kein anderes Programm für die Datei ein Zugriffsmodi gewählt hat.In diesem Zusammenhang ist es wichtig mögliche Fehler beim Öffnen, Lesen, Schreiben abzufangen und darauf entsprechend reagieren. Ein einfaches On Error Resume Next reicht hier nicht aus !!!

    Hier noch einige Beispiele:

    'Andere Prozesse können die Datei nicht lesen
    Open "dateiname" For Input Lock Read As #1
    
    'Andere Prozesse können die Datei nicht lesen
    'und nicht schreiben
    Open "dateiname" For Input Lock Read Write As #1

    Optional zur den Zugriffsmodi für andere Programme kann man auch festlegen was das eigene Programm mit der Datei machen kann. Hier gibt es auch wiederum einige Optionen die ich hier aufführe:

    Modus Beschreibung
    Read Nur Leserechte
    Write Nur Schreibrechte
    Read Write Sowohl Lese als auch Schreibrechte [Default].

    Die Zugriffsrechte des eigenen Programms sind nur sinnvoll in Bezug auf Typisierte und Binären-Dateien und werden mit dem Parameter Access festgelegt.

    Hier noch einige Beispiele dazu:

    'Das Programm kann nur schreiben in die Datei
    Open "dateiname" For Binary Access Write As #1
    
    'Nur lessen erlaubt
    Open "dateiname" For Binary Access Read As #1
    
    'Das Programm kann nur lesen, andere Programme nur schreiben
    Open "dateiname" For Binary Access Read Lock Write As #1

    Textdateien  

    Textdateien sind Zeichen und Zeilenweise orientiert. Jeder Zeile wird durch die ASCII-Zeichen 13 und 10 abgeschlossen. Die Länge der Zeile wird allein durch die Position der beiden ASCII-Zeichen bestimmt. Man kann sich das so vorstellen:

    Das ist ein Text in eine Textdatei|10|13
    Die Zeilenlänge wird durch das CR bestimmt|10|13
    Es können auch ganz lange Zeilen seinablablablabla|10|13
    Textdateien können entweder zum lesen oder zum schreiben geöffnet werden. Das kombinieren der beiden Modi ist bei Textdateien nicht möglich [es sei den man schließt die Datei bevor in einem anderem Modus darauf zugegriffen wird]

    Wie öffnet man Textdateien zum Lesen ?  

    Um auf eine Textdatei zugreifen können, muss diese erst geöffnet werden. Dies geschieht mit dem Befehl Open [Parameter in Klammern sind optional]
    Open Pfadname For Modus [Access Zugriff] [Sperre] As [#]Dateinummer [Len=Satzlänge]

    Die Syntax der Open-Anweisung besteht aus folgenden Teilen:

    Modus Legt den Zugriffsmodus für die Datei fest. Möglich sind:
    • Append Schreibzugriff, Daten werden an die Datei angehängt.
    • Binary Zugriff auf die Datei im Binärmodus, dazu jedoch später mehr.
    • Input Lesezugriff, Datei kann nur gelesen werden.
    • Output Schreibzugriff, Daten können nur geschrieben werden, eine vorhandene Datei würde überschrieben.
    Zugriff Legt fest was das eigene Programm mit der Datei machen kann. [siehe oben]
    Sperre Legt fest wie und ob andere Programme mit der Datei machen können. [siehe oben]
    Dateinummer Eine gültige Dateinummer im Bereich von 1 bis 511 (einschließlich). Mit der FreeFile-Funktion erhält man die nächste verfügbare Dateinummer. Unter dieser Nummer erfolgen dann alle weitere Zugrigge des Programms auf die Datei
    Satzlänge Zahl kleiner oder gleich 32.767 (Bytes). Bei Dateien mit wahlfreiem Zugriff ist dies die Datensatzlänge, bei sequentiellen Dateien die Anzahl der gepufferten Zeichen

    Die erforderliche Modusangabe ist einer der größten Nachteile eine Textdatei.

    'Beispiele für Öffnen der AUTOEXEC.BAT zum lesen:
    Open "AUTOEXEC.BAT" For Input As #1
    
    'Beispiel zum öffnen eine Textdatei zum schreiben:
    Open "C:\Test.txt" For Output As #1
    
    'Beispiel um Daten an eine bestehende Textdatei anzuhängen:
    Open "C:\Test.txt" For Append As #1

    Wenn die Open-Anweisung von Misserfolg war, tritt im allgemeinen ein Laufzeitfehler 53 auf. Diesen kann man mit der On Error Goto-Anweisung jedoch abfangen:

    Private Sub Egal()
    
      On Error Goto Fehler
      Dim Datei As String
      Dim Fnr As Long
    
        Datei = "C:\Test.txt"
        Fnr = FreeFile
        Open Datei For Input As Fnr
        '...
        Close Fnr
        Exit Sub
    
    Fehler:
        MsgBox "Es trat ein Fehler beim Öffnen der" & _
               " Datei !", 16, "Problem"
        Exit Sub
        Resume Next
    End Sub

    Wie kann ich Textdateien lesen?

    Beim Lesen einer Textdatei muss zwischen drei verschiedenen Möglichkeiten unterschieden werden:

    • Zeilenweise Einlesen
    • Bestimmte Anzahl von Zeichen lesen
    • Variablen einlesen

    Eine Textdatei Zeilenweise lesen
    Zeilenweise lesen bedeutet, dass mit dem Line Input-Befehl, aus einer Datei alle Zeichen bis zum Zeilenende [wir erinnern uns ASCII 10 und 13] gelesen und in eine Variable gespeichert werden. Die jeweils nächste Zeile wird dann mit dem nächstem Line Input-Befehl gelesen. Die Zeilenende-Makierungen werden dabei nicht in der Variable gespeichert !

    Das Zeilenweise Lesen eine Textdatei erreicht man mit dem Befehl:
    Line Input #Dateinummer, Variablenname

    Parameter Beschreibung
    Dateinummer Eine beliebige gültige Dateinummer
    Variablenname Ein gültiger Variablenname vom Typ Variant oder String

    Mit folgendem Code kann man beispielweise ein Listenfeld mit Einträgen füllen die in eine Textdatei gespeichert sind:

    While Not EOF(dateinr)
        Line Input #dateinr, variable
        List1.AddItem variable
    Wend

    Hierbei werden solange Einträge in ein Listfeld hinzugefügt bis das Dateiende erreicht wird ( While Not EOF ) Bei Line Input muss man den Umweg über eine Variable machen um den Text eine Eigenschaft eines Steuerelementes übergeben. Bei:

    Line Input #DateiNr , Text1.Text
    bekommt man einen Laufzeitfehler! Hier einige weitere Beispiele:
    Dim Zeiger As Long
    Dim Name() As String
    Dim Adresse() As String
    Dim Tel() As String
    Dim temp
    Dim temp1
    
      '...
      Open "C:\Adressen.txt" For Input As 1
        ReDim Preserve Name(0)
        ReDim Preserve Adresse(0)
        ReDim Preserve Tel(0)
        While Not EOF(1)
          Line Input #1, Name(UBound(Name))
          Line Input #1, Adresse(UBound(Adresse))
          Line Input #1, Tel(UBound(Tel))
          ReDim Preserve Name(UBound(Name) + 1)
          ReDim Preserve Adresse(UBound(Adresse) + 1)
          ReDim Preserve Tel(UBound(Tel) + 1)
        Wend
      Close 1

    Dieses kleine Programm liest aus eine Textdatei Name, Adresse und die Tel.Nr und speichert es in die drei Arrays. Nächstes Beispiel:

    Dim Monat(12) As String
    Dim Wochentag(7) As String
    Dim Temp
    
      '...
      Open "C:\Test.txt" For Input As 1
        For Temp = 1 To 7
          Line Input #1, Wochentag(Temp)
        Next Temp
    
        For Temp = 1 To 12
          Line Input #1, Monat(Temp)
        Next Temp
      Close 1

    Bestimmte Anzahl von Zeichen lesen
    Diese Möglichkeit des Dateilesens ermöglicht den gesamten Inhalt der Textdatei, also inklusive der Zeilenend-Zeichen, zu lesen. Das kann man sich zunutze machen, wenn man ein Multiline-Textfeld mit dem Inhalt eine Textdatei füllen will. Um eine bestimmte Anzahl von Zeichen aus eine Textdatei zu lesen verwendet man folgenden Befehl:
    Variable = Input(Zahl, [#]Dateinummer)

    Parameter Beschreibung
    Zahl Ein beliebiger gültiger numerischer Ausdruck, der die Zahl der zurückzugebenden Zeichen angibt
    Dateinummer Eine beliebige gültige Dateinummer
    Variable Enthält die Zurückgegebene Zeichen aus der Datei

    Zur Input gibt es einfach nicht viel zusagen. Es liest einfach die angegebene Anzahl von Zeichen aus der Datei und übergebt sie der Variable. Es sollte vielleicht beachtet werden das man bei dem munterem lesen nicht über das Dateiende hinauskommt, sonst gibt es eine Fehlermeldung. Einige Beispiele sollten das ganze verständlicher machen.

    Dim temp As String
    
      Open dateiname For Input As dateinummer
        temp = Input(LOF(dateinummer), dateinummer)
      Close dateinummer
      Text1.Text = temp

    Der vorherige Code liest die ganze Textdatei [ LOF(dateiname) gibt die Dateilänge zurück ] in die temp-Variable und dann wird der Text in eine TextBox angezeigt. Hierbei sollte beachtet werden das die MultiLine-Eigenschaft der TextBox auf True gesetzt ist sonst werden die Zeilenendzeichen als senkrechte Striche in der TextBox angezeigt und es erfolgt kein Zeilenumbruch.

    Dim temp As String
    
      Open dateiname For Input As dateinummer
      While Not EOF(dateinummer)
        temp = Input(1, dateinummer)
        List1.AddItem temp
      Wend
      Close dateinummer

    Hier wird die Textdatei ein Zeichen nach dem anderem solange gelesen bis das Dateiende erreicht wird. Die gelesener Zeichen werden in eine ListBox angezeigt.

    Dim temp As String
    
      Open dateiname For Input As dateinummer
        temp = Input(100, dateinummer)
      Close dateinummer
      Text1.Text = temp

    Hier werden die ersten 100 Zeichen der Textdatei gelesen und in einer Textbox angezeigt. Sollte die Textdatei keine 100 Zeichen haben kommt es zu einer Fehlermeldung.

    Variablen einlesen

    An dieser Stelle möchte ich auf eine Besonderheit mit der Deutschen Win-Version eingehen. Variablen werden nämlich mit einem Komma voneinander in der Datei getrennt, gleichzeitig werden aber Gleitkommawerte mit einen Komma getrennt. Wundert euch also nicht wenn nach dem lesen von Gleitkommawerten die Zahlen nicht übereinstimmen. (Hier vielleicht ein Vorschlag am Rande: Gleitkommazahlen vor dem Speichern mit einen Faktor X multiplizieren, und nach dem lesen wieder Dividieren). Wie liest man denn Variablen ein? Dazu gibt es Folgende Funktion:

    Variable = Input #Dateinummer, Varliste

    Parameter Beschreibung
    Dateinummer Eine beliebige gültige Dateinummer
    Varliste Liste mit Variablen, die jeweils durch ein Komma als Listentrennzeichen voneinander getrennt sind und denen die aus der Datei gelesenen Werte zugewiesen werden. Es kann weder ein Datenfeld noch eine Objektvariable sein. Sie können jedoch Variablen verwenden, die ein Element eines Datenfeldes oder benutzerdefinierten Typs beschreiben

    Diese Funktion liest aus der Textdatei Werte ein und weist die den Variablen zu.

    Dim Sek As Double
    Dim Min As Double
    
      '...
      Input #dateinummer, Sek, Min

    Dieses Beispiel liest aus eine Datei zwei Werte und weist sie den Variablen Sek und Min zu. Habt ihr gut aufgepasst? Wird es in Deutschland funktionieren? Bekommt man richtige Werte den Variablen zugewiesen? Was glaubst Du?
    Dim Text1 As String
    Dim Zahl1 As Long
    
      '...
      Open "C:\Test.txt" For Input As #1
        Input #1, Text1, Zahl1
      Close #1

    Hier wird erstens eine Textvariable und dann ein Zahl gelesen. Dieses Beispiel sollte einwandfrei funktionieren da Longwerte keine Nachkommastellen haben. (außer das der String ein Komma haben sollte)

    Dim Text1 As String
    Dim Zahl1 As Long
    
      '...
      Open "C:\Test.txt" For Input As #1
        Input #1, Text1
        Input #1, Zahl1
      Close #1

    Hier wird das gleiche getan wie im vorherigem Beispiel jedoch werden zwei Input-Funktionen verwendet.So kommen wir jetzt zum nächstem Thema.

    Wie öffne ich Textdateien zum schreiben/speichern ?  

    Zuerst muss man überlegen ob eine möglicherweise schon vorhandene Datei behalten werden soll und die neuen Daten an die vorhandene angehängt werden sollen, oder soll eine komplett neue Datei angelegt werden? Wenn man eine neue Datei anlegen will, egal ob schon eine mit dem gleichem Namen im gleichem Verzeichnis vorhanden ist, die dann gnadenlos gelöscht wird, übergibt man dem Open-Befehl den Parameter For Output. Dadurch wird eine leere Datei angelegt.

    Open dateiname For Output As #1
    Was die anderen Parameter bedeuten muss ich hier wohl nicht noch mal erklären. Um auf die andere Möglichkeit eingehen, wo eine möglicherweise bestehender Datei auf jeden Fall beibehalten werden soll und die neuen dazukommenden Daten an die Datei angehängt werden sollen (also an das Ende der Datei schreiben), tauschen wir einfach For Output durch For Append.
    Open dateiname For Append As #1
    Ist jetzt keine Datei vorhanden wird einfach eine neue angelegt, es kommt nicht zu einer Fehlermeldung.

    Wie speichert man Daten in Textdateien ?

    Beim Speichern in eine Textdatei muss man ähnlich wie beim Lesen zwischen zwei verschiedenen Mögöligkeiten unterscheiden:

    • Zeilenweise speichern
    • Variablen speichern

    Es ist dabei egal ob die Datei neu angelegt wurde oder ob man an eine schon vorhandene Datei Daten anhängt. Die Ausgabefunktionen unterscheiden sich nicht voneinander.

    Zeilenweise speichern in Textdateien
    Das ist wohl die einfachste Mögöligkeit Text in eine Datei zu speichern. Die Befehlsyntax dazu sieht folgendermaßen aus:
    Variable = Print #Dateinummer, [Ausgabeliste]

    Parameter Beschreibung
    Dateinummer Eine beliebige gültige Dateinummer
    Ausgabeliste Ausdruck oder Liste mit Ausdrücken, die ausgegeben werden sollen. Es können Texte, Zahlen oder Variabelenwerte sein.

    Das ist zwar die einfachste Art Datei zu speichern, einige Besonderheiten muss man aber trotzdem beachten. So kann man das Zeilentrennzeichen mit einem Semikolon (;) unterdrücken, mit einem Komma (,) kann man ein Tabulator einfügen, und das direkte speichern von Zahlen ist auch etwas eigensinnig. Nehmen wir dazu am besten ein Beispiel:

    Dim a
    
      a = FreeFile
      b = 10
      Open "C:\text.txt" For Output As a
        Print #a, "Zeile1"
        Print #a, "Zeile2", "Zeile3"
        Print #a,                       'leere Zeile 4
        Print #a, "Zeile5"
        Print #a, "Zeile6";
        Print #a, "noch Zeile6"
      Close a

    Wenn man sich jetzt die Textdatei mit dem Notepad anschaut sieht es so aus:

    Zeile1
    Zeile2 Zeile3
    
    Zeile5
    Zeile6noch Zeile6
    Was ist denn passiert?
    Print #a, "Zeile1" hier wurde ganz normal eine Zeile in die Textdatei geschrieben.
    Print #a, "Zeile2", "Zeile3" hier hat das Komma zwischen „Zeile2" und „Zeile3" nicht wie vermutet den Text "Zeile3" in eine neue Zeile geschrieben. Es wurde einfach ein Tabulatorzeichen hinter dem Text "Zeile2" hinzugefügt (ASCII 10) was bewirkt das der nachfolgender, beim betrachten mit Notepad, Text einfach ein bisschen nach rechts verschoben wird. Es werden keine Leerzeichen (SPACE oder ASCII 32) zwischen den Texten Zeile2 und Zeile3 eingefügt !!!
    Print #a, hier wurde einfach eine leere Zeile hinzugefügt.
    Print #a, "Zeile5" hier wieder die normale Ausgabe.
    Print #a, "Zeile6"; das Semikolon hat hier das Zeilenendzeichen unterdrückt, so das die nächste Print- Ausgabe nicht in eine neue Zeile beginnt sondern direkt nach dem letztem Zeichen der aktuelle Zeile.
    Print #a, "noch Zeile6" hier kann man nicht erkennen ob der Text in eine neuen Zeile geschrieben wird. Dazu muss man den letzten Print-Befehl genauer ansehen.

    So jetzt ist die Verwirrung groß ! Zur Verdeutlichung noch die einzelnen Möglichkeiten als einzelne Progis mit den entsprechenden Aussehen der Dateien:

    Möglichkeit 1:

    Print #a, "Zeile1"
    Print #a, "Zeile2"
    Print #a, "Zeile3"
    Print #a, "Zeile4"
    Die Datei sieht dann so aus.
    Zeile1
    Zeile2
    Zeile3
    Zeile4

    Möglichkeit 2:

    Print #a, "Zeile1",
    Print #a, "Zeile2",
    Print #a, "Zeile3",
    Print #a, "Zeile4",
    Die Datei sieht dann so aus.
    Zeile1        Zeile2                Zeile3                Zeile4

    Möglichkeit 3:

    Print #a, "Zeile1";
    Print #a, "Zeile2";
    Print #a, "Zeile3";
    Print #a, "Zeile4";
    Die Datei sieht dann so aus.
    Zeile1Zeile2Zeile3Zeile4

    Natürlich kann man das ganze miteinander kombinieren. Weiter ist es auch möglich Variabelenwerte, sei es ein String oder Zahl, Objekteigenschaften, z.B. Text1.Text oder Command1.Caption oder auch andere, dem Print-Befehl zur übergeben. Handelt es sich bei den Werten nicht um Zahlen verhält sich die Ausgabe gleich wie vorhin, werden jedoch Zahlen gespeichert (also kein Text) sind einige Eigenheiten zur beachten.

    Werden Zahlen direkt oder aus eine Variable gespeichert, fügt der Print-Befehl (ohne zufragen) ein Leerzeichen vor der Zahl und ein Leerzeichen hinter der Zahl !!! Egal ob die Ausgabe mit Komma oder Semikolon abgeschlossen wird. Dies kann man aber leicht umgehen (wenn erwünscht). Das Verhalten zeige ich am besten wieder mit einem Beispiel.

    Dim a
    Dim b As Long
    
      a = FreeFile
      b = 10
      Open "C:\text.txt" For Output As a
        Print #a, 10
        Print #a, b
        Print #a, 10, 10, 10
        Print #a, b, b, b
        Print #a, 10; 10; 10
        Print #a, b; b; b
        Print #a, Str$(10); Str$(10); Str$(10)
        Print #a, Str$(b); Str$(b); Str$(b)
        Print #a, CStr(10); CStr(10); CStr(10)
        Print #a, CStr(b); CStr(b); CStr(b)
        Print #a, "101010"
      Close a

    Die Textdatei sieht im Notepad so aus (# steht für Leerzeichen):

    #10#
    #10#
    #10#            #10#            #10#
    #10#            #10#            #10#
    #10##10##10#
    #10##10##10#
    #10#10#10
    #10#10#10
    101010
    101010
    101010

    Die Erklärung:

    Print #a, 10
    Print #a, b
    Die zwei Zeilen verhalten sich gleich. Es wird jeweils ein Leerzeichen vor der Zahl und eins nach der Zahl eingefügt. Am Ende der Zeile kommt ein Zeilenendzeichen.
    Print #a, 10, 10, 10
    Print #a, b, b, b
    Hier wiederum gleiches Verhalten, jedoch wird noch (durch das Komma) ein Tabulatorzeichen (ASCII 10) eingefügt.
    Print #a, 10; 10; 10
    Print #a, b; b; b
    Hier werden die Zahlen zwar in eine Zeile gespeichert, aber mit jeweils einem Leerzeichen vor der Zahl und einem nach der Zahl.
    Print #a, Str$(10); Str$(10); Str$(10)
    Print #a, Str$(b); Str$(b); Str$(b)
    Mit Str$() ist es möglich das hinzufügen des Leerzeichen nach der Zahl zu unterdrücken.
    Print #a, Print #a, CStr(10); CStr(10); CStr(10)
    Print #a, CStr(b); CStr(b); CStr(b)
    Und durch CStr() werden sowohl das vorgestellt als auch das nachgestellte Leerzeichen entfernt.

    Variablen speichern
    Man kann natürlich auch in Textdateien Variabelenwerte speichern. Wie man die wieder auslesen kann haben wir bereits erfahren. Das speichern von Variablen geschieht mit:
    Variable = Write #Dateinummer, [Ausgabeliste]

    Parameter Beschreibung
    Dateinummer Eine beliebige gültige Dateinummer
    Ausgabeliste Eine oder mehrere (durch Kommas getrennte) numerische Ausdrücke oder Zeichenfolgenausdrücke, die in eine Datei geschrieben werden sollen

    Daten, die mit der Write #-Anweisung geschrieben worden sind, werden normalerweise mit der Input #-Anweisung aus einer Datei gelesen.

    Mehrere Ausdrücke können durch Leerzeichen, Semikolons oder Kommas voneinander getrennt werden. Leerzeichen und Semikolon haben dieselbe Wirkung.

    Wenn Sie mit Write # Daten in eine Datei schreiben, gelten mehrere allgemeingültige Voraussetzungen, damit die Daten unabhängig vom Gebietsschema mit Input # immer richtig gelesen und interpretiert werden können:

    • Numerische Daten werden immer mit dem Punkt als Dezimaltrennzeichen geschrieben.
    • Daten vom Typ Boolean, werden entweder mit #TRUE# oder #FALSE# ausgegeben. Die Schlüsselwörter True und False werden nicht übersetzt, unabhängig vom Gebietsschema.
    • Daten vom Typ Date werden immer im universellen Datums- und Zeitformat in die Datei geschrieben. Fehlt entweder die Datums- oder die Zeitangabe, oder ist sie gleich Null, so wird nur der vorhandene Teil in die Datei geschrieben.
    • Wenn Daten in der Ausgabeliste den Wert Empty haben, werden keine Daten in die Datei geschrieben. Haben die Daten jedoch den Wert Null, so wird #NULL# in die Datei geschrieben.
    • Wenn die Daten in der Ausgabeliste Null-Daten sind, wird #NULL# in die Datei geschrieben.
    • Wenn die Daten den Wert Error haben, wird #ERROR Fehler-Code# ausgegeben. Das Schlüsselwort Error wird unabhängig vom Gebietsschema nicht übersetzt.

    Im Gegensatz zur Print #-Anweisung fügt die Write #-Anweisung beim Schreiben in die Datei Kommas zwischen Elementen und Anführungszeichen eingeschlossener Zeichenfolgen ein. Sie brauchen daher in der Liste kein explizites Trennzeichen anzugeben.

    Die Write #-Anweisung fügt einen Zeilenumbruchzeichen, d.h. eine Kombination aus Wagenrücklauf und Zeilenvorschub (Chr(13) + Chr(10)), ein, nachdem sie das letzte Zeichen aus der Ausgabeliste in die Datei geschrieben hat.

    Ein Praktisches Beispiel noch an dieser Stelle, und dann ist das Thema auch schon fast fertig.

    Dim a
    Dim b
    
      a = FreeFile
      b = 10
      Open "C:\text.txt" For Output As a
        Write #a, 10, 10, 10
        Write #a, b, b, b
        Write #a, 10; 10; 10
        Write #a, b; b; b
        b = True
        Write #a, b, b, b, b
        b = 0.001
        Write #a, b, b, b
        b = "Hallo"
        Write #a, b, b
        Write #a, "Hallo", "Hallo"
      Close a

    Die Datei betrachtet mit Notepad sieht so aus:

    10,10,10
    10,10,10
    10,10,10
    10,10,10
    #TRUE#,#TRUE#,#TRUE#,#TRUE#
    .001,.001,.001
    "Hallo","Hallo"
    "Hallo","Hallo"

    Wie man sieht ist hier egal ob man die Ausgabeliste durch Kommas oder Semikolons trennt, in der Datei werden auf jeden Fall die Werte durch Kommas getrennt.

    Bis jetzt haben wir schon eine Menge Wissen gesammelt. Jetzt kennen wir uns mit Textdateien aus. Was jetzt noch bleibt ist zwar nicht mehr so umfangreich aber genau so interessant.

    Tutorial als PDF-Datei [479KB] [491225 Bytes]

    Ihre Meinung  

    Falls Sie Fragen zu diesem Tutorial haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.