.txt Datei auslesen - Problem

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    .txt Datei auslesen - Problem

    Nabend!

    Ich bin heute mal in den Visual Basic Express 2010 Editor eingestiegen und habe schon mein erstes Problem!
    Und zwar will ich ganz simpel eine .txt Datei auslesen: Die Idee war, ein Profil zu erstellen ( Die Namen werden in der besagten .txt Datei gespeichert ), welches bei jedem Start des Programmes übernommen werden kann.

    Der Code sieht bisher wie folgt aus:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. Dim Profil(5) As String
    3. Dim i As Integer
    4. FileOpen(1, "Profile.txt", OpenMode.Random)
    5. If File.Exists("Profile.txt") Then
    6. For i = 1 To 5
    7. Do
    8. Try
    9. FileGetObject(1, Profil(i), i)
    10. MsgBox(Profil(i))
    11. Exit Try
    12. Catch
    13. MsgBox("Profile.txt beschädigt")
    14. Exit Do
    15. End Try
    16. Loop
    17. Next
    18. FileClose(1)
    19. Else
    20. MsgBox("Profile.txt existiert nicht")
    21. End If
    22. FileClose(1)
    23. If Profil(1) = "" Then
    24. Bt_Profil1.Text = "Neues Profil anlegen"
    25. Else
    26. Bt_Profil1.Text = Profil(1)
    27. End If
    28. End Sub


    Die Fehlermeldungen:
    Eine Ausnahme (erste Chance) des Typs "System.Exception" ist in Microsoft.VisualBasic.dll aufgetreten.
    Eine Ausnahme (erste Chance) des Typs "System.IO.EndOfStreamException" ist in Microsoft.VisualBasic.dll aufgetreten.
    Eine Ausnahme (erste Chance) des Typs "System.IO.EndOfStreamException" ist in Microsoft.VisualBasic.dll aufgetreten.
    Eine Ausnahme (erste Chance) des Typs "System.IO.EndOfStreamException" ist in Microsoft.VisualBasic.dll aufgetreten.
    Eine Ausnahme (erste Chance) des Typs "System.IO.EndOfStreamException" ist in Microsoft.VisualBasic.dll aufgetreten.



    Was ist nun mein Fehler? Das Programm scheint wohl einen Bereich auszulesen, der in der Profile.txt nicht existiert - tut er aber! Ich habe die .txt mit 5 Zeilen gefüllt.
    Oder ist es überhaupt sinnvoll, dieses Vorhaben mit .txt Dateien durchzuführen? ( Access besitze ich leider nicht )
    Das Programm soll im Endeffekt ein kleines Kartenspiel, angelegt an Yu-Gi-Oh, sein. Von daher müsste ich im weiteren Verlaufen mehrere weitere .txt Datein / Datenbanken erstellen, bearbeiten und auslesen.

    Ich möchte Euch schon jetzt für Eure Antworten danken :thumbsup:


    Edit by Manschula: Thema verschoben

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Manschula“ ()

    Hi,

    wenn ich das richtig verstehe, willst du ganz einfach eine Textdatei auslesen.

    Ich würde das so machen:

    VB.NET-Quellcode

    1. Dim filereader As New System.IO.StreamReader("Profile.txt")
    2. Dim inhalt As String = filereader.ReadToEnd()
    3. filereader.Close()


    Damit hast du den Inhalt in der Variablen inhalt.

    Du kannst statt dem

    VB.NET-Quellcode

    1. filereader.ReadToEnd()

    auch mit

    VB.NET-Quellcode

    1. filereader.ReadLine()

    arbeiten. Dann musst du das aber in einer Schleife machen.

    Ich hoffe, ich konnte dir helfen! :)

    Viele Grüße,
    teha
    oder typisiertes Dataset.
    Das kann laden, speichern, zufügen, löschen, editieren, jeweils mit einer CodeZeile.

    Auch sind die Datensätze typisiert. Um etwa eine Option "AnzahlZuletztGeoeffneterDateien" zu implementieren mußt du nicht diesen Wert in Ini oder Xml suchen und von String nach Integer parsen (und beim Speichern zurück), sondern dein Optionen-Datensatz enthält einfach eine Property AnzahlZuletztGeoeffneterDateien As Integer.
    Die kannste lesen und schreiben, unds Dataset kannste laden und speichern als ganzes.
    Ich hab das ganze jetzt mal mit dem Tipp von teha geregelt, klappt super!

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. Dim Profil(5) As String
    3. Dim filereader As New System.IO.StreamReader("Profile.txt")
    4. Profil(1) = filereader.ReadLine()
    5. Profil(2) = filereader.ReadLine()
    6. Profil(3) = filereader.ReadLine()
    7. Profil(4) = filereader.ReadLine()
    8. Profil(5) = filereader.ReadLine()
    9. filereader.Close()
    10. Bt_Profil1.Text = Profil(1)
    11. Bt_Profil2.Text = Profil(2)
    12. Bt_Profil3.Text = Profil(3)
    13. Bt_Profil4.Text = Profil(4)
    14. Bt_Profil5.Text = Profil(5)
    15. If Bt_Profil1.Text = "" Then
    16. Bt_Profil1.Text = "Neues Profil anlegen"
    17. End If
    18. If Bt_Profil2.Text = "" Then
    19. Bt_Profil2.Text = "Neues Profil anlegen"
    20. End If
    21. If Bt_Profil3.Text = "" Then
    22. Bt_Profil3.Text = "Neues Profil anlegen"
    23. End If
    24. If Bt_Profil4.Text = "" Then
    25. Bt_Profil4.Text = "Neues Profil anlegen"
    26. End If
    27. If Bt_Profil5.Text = "" Then
    28. Bt_Profil5.Text = "Neues Profil anlegen"
    29. End If
    30. End Sub


    Da ich nun aber eine größere "Datenbank" anlegen muss, werde ich wohl auf den Tipp der anderen zurückgreifen, auch wenn ich auf diesen Gebieten garkeine Ahnung habe :D

    Aber ein dickes Danke an alle für die schnellen Antworten! :thumbsup:
    Es nützt nicht viel, wenn Du nachsiehst, ob die Datei da ist.
    Wenn sie leer ist, knallt es beim Einlesen.
    Bei einer INI-Datei (leider veraltet) gibst Du einfach den Wert vor, den Du zurückbekommen möchtest, wenn der Eintrag nicht da ist.
    Bei allen anderen musst Du etwas mehr Schmalz investieren, wenn Einträge und Inhalte fehlen.
    Vielleicht geht noch

    VB.NET-Quellcode

    1. Dim lines() As String = System.IO.File.ReadAllLines(DEINE_DATEI)
    da hast Du den gesamten Dateiinhalt zeilenweise im Feld lines.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!