Lesen / Schreiben

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von MemoAnMichSelbst.

    Lesen / Schreiben

    Guten Tag da ich neu bin und mich zZ an Vb versuchen möchte hatte ich mir eine kleine Aufgabe gestellt

    Aufgabe:

    -Lesen aus einer Text Datei
    -Schreiben in eine Neue Text Datei

    Im ersten Sub wird ein Fenster geöffnet wo ich die zu "lesende" Datei auswähle.

    Der Zweite Sub sollte die vollständige Datei importieren in eine neue Text Datei, was leider nur bedingt funktioniert da nur die letzte Zeile geschrieben wird
    vorangestellt von einen Return.

    Der Dritte sub stellt einfach nur schreib() zur Verfügung wo der Ort und der Name der File angegeben sind

    Nun bräuchte ich einen Denkanstoß damit es weiter gehen kann... :)
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim vorgelesenes As String
    2. Dim reader As String
    3. Dim datei As New OpenFileDialog
    4. ' Dim datei1 As New OpenFileDialog
    5. Public Sub datei_auswahl()
    6. datei.InitialDirectory = "E:\Vb_Prog\KlemmDef\Vergleich\WindowsApplication1\bin\Debug\"
    7. datei.Title = "Datei zum Importieren auswählen"
    8. If datei.ShowDialog() = DialogResult.OK Then
    9. Else MsgBox("Nichts ausgewählt", MsgBoxStyle.OkOnly, "Fehler!")
    10. End If
    11. End Sub
    12. Private Sub import_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles import.Click
    13. Dim lesen As New FileStream(datei.FileName, FileMode.Open)
    14. Dim vorlesen As New StreamReader(lesen)
    15. Dim wort As String
    16. Do Until vorlesen.Peek() = -1
    17. wort = vorlesen.ReadLine()
    18. vorgelesenes = wort & vbCrLf
    19. Loop
    20. vorlesen.Close()
    21. schreiben()
    22. End Sub
    23. Private Sub schreiben()
    24. Dim fs As New FileStream("E:\Vb_Prog\KlemmDef\Vergleich\WindowsApplication1\bin\Debug\DB_Bib\Datenbank\Datenbank.txt", FileMode.Append)
    25. Dim sw As New StreamWriter(fs)
    26. sw.WriteLine(vorgelesenes)
    27. sw.Close()
    28. End Sub

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Orange“ () aus folgendem Grund: Expander eingefügt

    Edit by ErfinderDesRades: unnötiges Vollzitat entfernt


    mehr nicht ?

    Könnte mir da noch jemand sagen was ich da falsch gemacht habe ? Nur aus Fehlern lernt man ;)

    Peek() geht doch bis zum ende der Datei und gibt dann ein -1 aus wenn alle Zeilen durchlaufen wurden, solang läuft doch der loop und füllt den string vorgelesenes, hab das doch richtig verstanden ?

    also schiebt er jede Zeile gefolgt von einem return nach und nach in vorgelesenes.

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

    Willkommen im Forum. :thumbup:
    Wenn Du zum zweiten Mal in Deine Prozedur datei_auswahl() reinkommst, knallt es.
    Die File-Dialoge werden so benutzt:

    VB.NET-Quellcode

    1. Using dlg As New OpenFileDialog
    2. dlg.Filter = "Text files|*.txt|All files|*.*"
    3. If dlg.ShowDialog <> Windows.Forms.DialogResult.OK Then
    4. Return
    5. End If
    6. ' mit dlg.FileName was tun
    7. End Using
    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!

    VB.NET-Quellcode

    1. vorgelesenes = wort & vbCrLf


    VB.NET-Quellcode

    1. vorgelesenes = string.concat(vorgelesenes, wort, vbCrLf)


    Du hast die Variable vorgelesenes immer neu beschrieben... Nicht ergänzt.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    Immer noch das das letzte Zeichen :P

    Danke, soweit habe ich den Code mal abgeändert

    VB.NET-Quellcode

    1. Public Sub datei_auswahl()
    2. Using auswahl As New OpenFileDialog
    3. auswahl.Filter = "Text files (*.txt)|*.txt; *.doc|" & "E-Plan5 (*.efx)|*.exf|" & "All files... (*.*)|*.*"
    4. auswahl.Title = "Datei zum Importieren auswählen"
    5. If auswahl.ShowDialog <> Windows.Forms.DialogResult.OK Then
    6. Return
    7. End If
    8. Dim lesen As New FileStream(auswahl.FileName, FileMode.Open)
    9. Dim vorlesen As New StreamReader(lesen)
    10. Dim wort As String
    11. Do Until vorlesen.Peek() = -1
    12. wort = vorlesen.ReadLine()
    13. vorgelesenes = string.concat(vorgelesenes, wort, vbCrLf)
    14. Loop
    15. vorlesen.Close()
    16. Dim fs As New FileStream("E:\Vb_Prog\KlemmDef\Vergleich\WindowsApplication1\bin\Debug\DB_Bib\Datenbank\Datenbank.txt", FileMode.Append)
    17. Dim sw As New StreamWriter(fs)
    18. sw.WriteLine(vorgelesenes)
    19. sw.Close()
    20. End Sub


    In der auszuwählenden Datei stehen 10 Zeichen in jeder Zeile und er gibt mir immer noch nur das 10. Zeichen in der Neuen Datei aus.

    Gibt es eine Möglichkeit auch dann außerhalb des Subs datei_auswahl() auf auswahl.filename zugreifen zu können wenn ich den code von dem sub zb in ein Modul auslagere ?
    Hast du dir meinen Post überhaupt durchgelesen?
    Der Fehler ist nämlich noch immer drin!
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    Orange schrieb:

    außerhalb des Subs datei_auswahl() auf auswahl.filename zugreifen zu können
    Modul ist nicht gut.
    Mach Dir eine

    VB.NET-Quellcode

    1. Public Function datei_auswahl() As String
    2. Return String.Empty ' bei Abbruch des Dialoges
    3. ' ...
    4. Return DIE_AUSGEWÄHLTE_DATEI
    5. End Function
    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!
    Ich hab nu ein leichtes Problem zu verstehen was du meinst...

    Du meinst nicht das hier enthaltene Return:

    VB.NET-Quellcode

    1. If auswahl.ShowDialog <> Windows.Forms.DialogResult.OK Then
    2. Return
    3. End If


    Sondern meinst, dass er in "vorgelesenes" eine leerzeile an den Anfang setzt?

    Was genau ist der Sinn der Anwendung?
    Liest du aus einer Datei aus und willst dann jeden Buchstaben in ne eigene Zeile schreiben?

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Using auswahl As New OpenFileDialog
    2. auswahl.Filter = "Text files (*.txt)|*.txt; *.doc|E-Plan5 (*.efx)|*.exf|All files... (*.*)|*.*"
    3. auswahl.Title = "Datei zum Importieren auswählen"
    4. If auswahl.ShowDialog = Windows.Forms.DialogResult.OK Then
    5. Dim buchstabe As String
    6. Dim vorgelesenes As String = ""
    7. Dim lesen As New System.IO.FileStream(auswahl.FileName, System.IO.FileMode.Open)
    8. Using vorlesen As New System.IO.StreamReader(lesen)
    9. Do
    10. buchstabe = vorlesen.Read()
    11. vorgelesenes = String.Concat(vorgelesenes, buchstabe, vbCrLf)
    12. Loop Until buchstabe Is Nothing
    13. End Using
    14. My.Computer.FileSystem.WriteAllText("E:\Vb_Prog\KlemmDef\Vergleich\WindowsApplication1\bin\Debug\DB_Bib\Datenbank\Datenbank.txt", vorgelesenes, True)
    15. End If
    16. End Using


    Ups: Kleiner Fehler war drin XD
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D