[TuT] Sequenziell eine Datei lesen und schreiben

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • [TuT] Sequenziell eine Datei lesen und schreiben

      Die Projekt Datei ist schon mit Visual Basic 2008 benutzbar.
      ====================================================

      In diesem Tutorial zeige ich euch, wie wir aus einer datei lesen und diese schreiben.

      ===================================
      ===================================
      •Was wir brauchen
      - Label1 (BackColor = Control, BorderStyle = Fixed3D, AutoSize = False)
      - Label2 (Text = Nr)
      - Label3 (Text = Vorname)
      - Label4 (Text = Nachname)
      - Label5 (Text = geboren am)
      - Checkbox1 (Text = Student)
      - Button1 (Text = >)
      - Button2 (Text = <)
      - Button3 (Text = Beenden)
      ===================================
      ===================================

      ===================================
      ===================================

      Als erstes brauchen wir den System.IO
      Diesen schreiben wir in unseren code über der Public Class Form1
      Imports System.IO


      Wir definieren die Strucktur einer Person:
      Private Structure Person
      Dim vorName, nachName As String
      Dim geburt As DateTime
      Dim student As Boolean
      End Structure


      Einige globale Variablen:
      Private pmax As Integer = 10 'Maximale Anzahl Personen
      Private pListe() As Person ' Statisches Array aus Structurvariablen
      Private pos As Integer = 0 'Positionzähler


      Beim Laden des Formulares wird das Personalarray angelegt und mit 10 Dummy-Personen gefüllt:
      ReDim pListe(pmax - 1)


      Datensätze Initalisieren:
      For i As Integer = 0 To pListe.Length - 1
      pListe(i).vorName = String.Empty
      pListe(i).nachName = String.Empty
      pListe(i).geburt = Convert.ToDateTime("1.1.1900")
      pListe(i).student = False
      Next i


      Die Personaldatei wird gelesen (bzw. neu angelegt) und angezeigt:
      readFile()
      anzeigen()


      Anzeigen eines Datensatzes:
      Private Sub anzeigen()
      Label1.Text = (pos + 1).ToString()
      TextBox1.Text = pListe(pos).vorName
      TextBox2.Text = pListe(pos).nachName
      ' Typkonvertierung beachten!
      TextBox3.Text = pListe(pos).geburt.ToShortDateString()
      CheckBox1.Checked = pListe(pos).student
      End Sub


      Speichern eines Datensatzes:
      Private Sub speichern()
      pListe(pos).vorName = TextBox1.Text
      pListe(pos).nachName = TextBox2.Text
      ' Typkonvertierung beachten!
      pListe(pos).geburt = Convert.ToDateTime(TextBox3.Text)
      pListe(pos).student = CheckBox1.Checked
      End Sub


      Vorwärts blättern:
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      If pos < pmax - 1 Then ' Anschlagkontrolle
      speichern()
      pos += 1
      anzeigen()
      End If
      End Sub


      Rückwärts blättern:
      Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
      If pos > 0 Then ' Anschlagkontrolle
      speichern()
      pos -= 1
      anzeigen()
      End If
      End Sub


      Beenden:
      Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
      Me.Close()
      End Sub


      Als erstes fügen wir das hier ein:
      Private pfad As String = "Personen.dat"


      Die folgende Methode liest die Datei sequenziell und füllt deren
      Inhalt in das Array (falls die Datei nicht vorhanden ist, wird sie neu angelegt):
      Private Sub readFile()
      Dim rStream As New FileStream(pfad, FileMode.OpenOrCreate, FileAccess.Read)
      Dim binReader As New BinaryReader(rStream)
      If rStream.Length > 0 Then
      For i As Integer = 0 To pmax - 1


      Von den zahlreichen Methoden des BinaryReader verwenden wir nur ReadString und ReadBoolean:
      pListe(i).vorName = binReader.ReadString()
      pListe(i).nachName = binReader.ReadString()
      pListe(i).geburt = Convert.ToDateTime(binReader.ReadString())
      pListe(i).student 0 binReader.ReadBoolean()
      Next i
      End If
      binReader.Close()
      rStream.Close()


      Nun auf umgekehrtem Weg den Arrayinhalt nacheinander (sequenziell) in die Datei schreiben:
      Private Sub writeFile()
      Dim wStream As New FileStream(pfad, FileMode.OpenOrCreate, FileAccess.Write)
      Dim binWriter As New BinaryWriter(wStream)
      For i As Integer = 0 To pmax - 1


      Von den zahlreichen Überladungen der Write-Methode brauchen wir nur die für die Datentypen String und Boolean:
      binWriter.Write(pListe(i).vorName)
      binWriter.Write(pListe(i).nachName)
      binWriter.Write(pListe(i).geburt.ToShortDateString())
      binWriter.Write(pListe(i).student)
      Next i
      binWriter.Flush() ' Puffer => Disk
      binWriter.Close()
      wStream.Close()
      End Sub


      Beim Schließen des Formulares wird das FormClosing-Event ausgelöst. Wir verwenden es,
      um den Arrayinhalt automatisch zu sichern:
      Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
      speichern() ' aktuellen Datensatz im Array sichern
      writeFile() ' Arrayinhalt in Datei abspeichern
      End Sub


      ===================================
      ===================================
      Hier ist nochmal der Gesamte SourceCode:
      Imports System.IO

      Public Class Form1

      Private Structure Person ' Struktur definieren
      Dim vorName, nachName As String
      Dim geburt As DateTime
      Dim student As Boolean
      End Structure

      Private pmax As Integer = 10 ' maximale Anzahl Personen
      Private pListe() As Person ' statisches Array aus Strukturvariablen
      Private pos As Integer = 0 ' Positionszähler

      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      ReDim pListe(pmax - 1)
      ' Datensätze initialisieren:
      For i As Integer = 0 To pListe.Length - 1
      pListe(i).vorName = String.Empty
      pListe(i).nachName = String.Empty
      pListe(i).geburt = Convert.ToDateTime("1.1.1900")
      pListe(i).student = False
      Next i
      readFile() ' Datei lesen bzw. neu erzeugen
      anzeigen()
      End Sub

      ' Anzeigen eines Datensatzes:
      Private Sub anzeigen()
      Label1.Text = (pos + 1).ToString()
      TextBox1.Text = pListe(pos).vorName
      TextBox2.Text = pListe(pos).nachName
      ' Typkonvertierung beachten!
      TextBox3.Text = pListe(pos).geburt.ToShortDateString()
      CheckBox1.Checked = pListe(pos).student
      End Sub

      ' Speichern eines Datensatzes:
      Private Sub speichern()
      pListe(pos).vorName = TextBox1.Text
      pListe(pos).nachName = TextBox2.Text
      ' Typkonvertierung beachten!
      pListe(pos).geburt = Convert.ToDateTime(TextBox3.Text)
      pListe(pos).student = CheckBox1.Checked
      End Sub

      ' vorwärts blättern:
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      If pos < pmax - 1 Then ' Anschlagkontrolle
      speichern()
      pos += 1
      anzeigen()
      End If
      End Sub

      ' rückwärts blättern:
      Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
      If pos > 0 Then ' Anschlagkontrolle
      speichern()
      pos -= 1
      anzeigen()
      End If
      End Sub

      ' Beenden
      Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
      Me.Close()
      End Sub

      ' ------------------------------------- Dateioperationen ----------------------------------------

      Private pfad As String = "Personen.dat"

      Private Sub readFile()
      Dim rStream As New FileStream(pfad, FileMode.OpenOrCreate, FileAccess.Read)
      Dim binReader As New BinaryReader(rStream)
      If rStream.Length > 0 Then ' nicht bei neu erzeugter Datei
      For i As Integer = 0 To pmax - 1
      pListe(i).vorName = binReader.ReadString()
      pListe(i).nachName = binReader.ReadString()
      pListe(i).geburt = Convert.ToDateTime(binReader.ReadString())
      pListe(i).student = binReader.ReadBoolean()
      Next i
      End If
      binReader.Close()
      rStream.Close()
      End Sub

      Private Sub writeFile()
      Dim wStream As New FileStream(pfad, FileMode.OpenOrCreate, FileAccess.Write)
      Dim binWriter As New BinaryWriter(wStream)
      For i As Integer = 0 To pmax - 1
      binWriter.Write(pListe(i).vorName)
      binWriter.Write(pListe(i).nachName)
      binWriter.Write(pListe(i).geburt.ToShortDateString())
      binWriter.Write(pListe(i).student)
      Next i
      binWriter.Flush() ' Puffer => Disk
      binWriter.Close()
      wStream.Close()
      End Sub

      Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
      speichern() ' aktuellen Datensatz im Array sichern
      writeFile() ' Arrayinhalt in Datei abspeichern
      End Sub
      End Class

      ===================================
      ===================================
      Hier könnt ihr das Projekt downloaden.

      Download
      Sequenzielle Datei lesen und schreiben.rar

      Virustotal
      Klickmich Ergebnis (1/41) Das aber auch nur weil es ein archiv ist.
      ===================================
      ===================================
      Bemerkung:
      -Die Personen.dat Datei wird beim Starten der Anwendung geladen.
      - Ein neuer oder editerter eintrag wird erst nach dem umblättern in die Array übernommen.

      ===================================
      ===================================
      Credits: Sedrika

      PS: Bei fragen könnt ihr sie direkt hier stellen.
      PSS: Ich habe diesen Code auch in meinem GM Tool v4 drinne nur etwas verändert.
    • Werbung zur Unterstützung des Forums ( Bitte AddBlocker deaktivieren )