Textdatei einlesen und alle 50 Zeilen splitten

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Bartolomeus76.

    Textdatei einlesen und alle 50 Zeilen splitten

    Hallo Zusammen!

    Stehe grade vor folgendem Problem: Ich möchte alle Zeilen einer Textdatei auslesen und diese dann alle 50 Zeilen "auftrennen".
    Das Einlesen sowie das Auftrennen in einzelne Zeilen funktioniert ja einwandfrei, bräuchte aber einen
    kleinen Denkanstoss wie ich eben nur alle 50 Zeilen splitte. Mein bisheriger Code:

    VB.NET-Quellcode

    1. Dim lines() As String = System.IO.File.ReadAllLines("E:\testvb.txt")


    In jeder Zeile stehen dabei nur Zahlen mit mehreren Nachkommastellen. Aus diesen Blöcken á 50 Zeilen möchte ich dann später einen
    Mittelwert bilden. Vielleicht hat dazu ja auch noch jemand einen Vorschlag, ansonsten versuche ich mich erst einmal selber daran ;)
    Wichtig wäre mir erstmal das richtige Aufsplitten.

    Schönen Gruß, Bartolomeus :)
    Hallo,

    Du brauchst eine For Schleife und eine if abfrage, wen der Wert 50 ist (oder ich glaube du musst den Mod Operator benutzen). Wen True Splitest du, einfach, du kannst das mit Me.Lines(50) machen vobei die Zahl dann ja wohl er die Zähler Variable der For schleife ist. Ich bin ein wenig aus der übrung gekommen aber dass müsste es sein.

    LG, Herbrich
    Willkommen im Forum. :thumbup:

    Bartolomeus76 schrieb:

    Aus diesen Blöcken á 50 Zeilen möchte ich dann später einen Mittelwert bilden.
    Warum später?
    Lies die Zeilen ein, konvertiere sie (Double.Parse() / Double.TryParse()) und leg sie in einer List(Of Double) ab, die kannst Du dann mit einer For-Schleife abklappern:

    VB.NET-Quellcode

    1. For i = 0 To MyList.Count - 1 Step 50
    2. Dim mw = Mittelwert(MyList, i)
    3. ' mit mw was tun
    4. Next
    Die Funktion Mittelwert(...) berechnet aus den Werten der übergebenen Liste ab Index i den Mittelwert über (maximal) 50 Elemente.
    Falls weniger da sind, musste drauf reagieren. :D
    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!
    Hi,
    erstmal vielen Dank für die Antworten! Leider musste ich Heute wieder einmal feststellen das ich noch viel lernen muss was VB angeht :D .
    Ich habe jetzt erstmal den Vorschlag von RodFromGermany aufgegriffen, dachte eigentlich auch alles verstanden zu haben. allerdings
    kann ich nicht ganz nachvollziehen warum er mir einen Fehler in der Mittelwertfunktion ausgibt...

    VB.NET-Quellcode

    1. Dim mw = Mittelwert(mylist, i)


    mylist wird mir dort als Fehler "Der Wert vom Typ "System.Collections.Generic.List(Of Double)" kann nicht in "Double" konvertiert werden." angezeigt.
    Kann nicht so ganz nachvollziehen warum das so ist. Hier mal mein bisheriger Code:

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Diagnostics
    3. Public Class Form1
    4. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    5. Dim values() As String = System.IO.File.ReadAllLines("E:\testvb.txt")
    6. Dim i As Integer
    7. Dim result As Double
    8. Dim mylist As New List(Of Double)
    9. For Each value As String In values
    10. result = Convert.ToDouble(value)
    11. mylist.Add(result)
    12. Next
    13. For i = 0 To mylist.Count - 1 Step 5
    14. Dim mw = Mittelwert(mylist, i)
    15. MsgBox(mw)
    16. Next
    17. End Sub
    18. Function Mittelwert(
    19. ByVal ParamArray mylist() As Double) As Double
    20. Dim i As Integer
    21. Dim Summe As Double = 0
    22. Dim Anzahl As Double
    23. For i = 0 To mylist.GetUpperBound(0)
    24. Summe += mylist(i)
    25. Next
    26. Anzahl = mylist.GetUpperBound(0) + 1
    27. If Anzahl > 0 Then
    28. Mittelwert = Summe / Anzahl
    29. Else
    30. Mittelwert = 0
    31. End If
    32. End Function
    33. End Class


    Schönen Gruß, Bartolomeus

    Bartolomeus76 schrieb:

    Hier mal mein bisheriger Code:
    Sieh Dir mal an, wie ich es gemeint hatte:
    Mittelwert

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. 'Dim values() As String = System.IO.File.ReadAllLines("E:\testvb.txt")
    4. Dim values() As String = {"1", "3", "5"}
    5. Dim result As Double
    6. Dim mylist As New List(Of Double)
    7. For Each value As String In values
    8. result = Convert.ToDouble(value)
    9. mylist.Add(result)
    10. Next
    11. For i = 0 To mylist.Count - 1 Step 50
    12. Dim mw = Mittelwert(mylist, i)
    13. MessageBox.Show(mw.ToString)
    14. Next
    15. End Sub
    16. Function Mittelwert(ByVal mylist As List(Of Double), ByVal start As Integer) As Double
    17. Dim i As Integer
    18. Dim Summe As Double = 0
    19. Dim Anzahl As Double = 0
    20. For i = start To Math.Min(start + 49, mylist.Count - 1)
    21. Summe += mylist(i)
    22. Anzahl += 1
    23. Next
    24. If Anzahl > 0 Then
    25. Return Summe / Anzahl
    26. End If
    27. Return 0
    28. End Function
    29. End Class
    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!