VB Zahlen aus txt einlesen und ausgeben

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von horstfh.

    VB Zahlen aus txt einlesen und ausgeben

    Hallo,

    Ich habe ein kleines Problem bei dem ich eure Hilfe bräuchte.

    Eine .txt Datei ist gegeben in folgendem Format:

    1,5,3,4
    1,6,7,8
    1,5,3,3,9

    Nun möchte ich diese Zahlen einlesen und einzeln ausgeben, das klappt auch soweit bist wir z.B an der Stell 4 sind denn dort kann ich mit der .split Funktion den Absatz nicht raustrennen. Somit erscheint mir, wenn ich eigentlich nur die 4 will, auch die 1. Hat hier jemand eine Idee?

    Danke schonmal :)
    Hallo

    ​Du musst die Datei Zeilenweise auslesen anstatt in einem rutsch.
    Siehe: Textdatei Zeilenweise auslesen

    ​Am besten du machst dir eine Variable ​Values as List(of Integer) und speicherst immer dort die Werte rein während du in einer Schleife die Zeilen durchgehst und jede Zeile mit Split zerlegst.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Hi,

    Ich steh leider am selben Problem wie vorher. Ich seh den Fehler einfach nich mehr.

    Mein Versuch sieht wie folgt aus:

    Imports Scripting
    Public Class Form1
    Dim fso As New FileSystemObject
    Dim ts As TextStream
    Dim b(a) As String
    Dim a As Integer
    Dim c(d) As String
    Dim d As Integer
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    a = InputBox("Aus wie vielen Zahlen besteht deine Datei")
    d = InputBox("Aus wie vielen Zeilen besteht deine Datei")

    ts = fso.OpenTextFile("C:\Users\Max\Desktop\test.txt")

    Do While Not ts.AtEndOfStream
    For i = 0 To d - 1
    c(i) = ts.ReadLine(i) <-------------"Außerhalb des Array bereichs" Ich versteh einfach nicht wie der Außerhalb liegen kann ... ^^

    Next
    Loop

    For i = 0 To d - 1
    b = c(i).Split

    Next

    For i = 0 To 14

    MsgBox(b(i))

    Next
    End Sub
    End Class
    Hallo

    Es ist aber schon ein VB.NET Projekt oder? Hast du zumindest angegeben.
    Was macht der Scipting Import da?

    So z.b.

    VB.NET-Quellcode

    1. Dim values As New List(Of Integer)
    2. For Each l As String In IO.File.ReadLines("Dein Pfad zur Datei")
    3. values.AddRange(CType(l.Split(CType(",", Char())), IEnumerable(Of Integer)))
    4. Next



    Edit:
    Sorry, mein Fehler

    Hatte die umwandlung von String in Integer nicht bedacht.

    VB.NET-Quellcode

    1. Dim values As New List(Of Integer)
    2. For Each l As String In IO.File.ReadLines("Dein Pfad zur Datei")
    3. Dim lValues As String() =l.Split(CType(",", Char()))
    4. For each item In lValues
    5. values.Add(CInt(item))
    6. Next
    7. Next

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Auf die schnelle ohne probieren

    Mach mal statt

    VB.NET-Quellcode

    1. Do While Not ts.AtEndOfStream
    2. For i = 0 To d - 1
    3. c(i) = ts.ReadLine(i) <-------------"Außerhalb des Array bereichs" Ich versteh einfach nicht wie der Außerhalb liegen kann ...
    4. Next
    5. Loop

    so

    VB.NET-Quellcode

    1. Do
    2. For i = 0 To d - 1
    3. c(i) = ts.ReadLine(i) <-------------"Außerhalb des Array bereichs" Ich versteh einfach nicht wie der Außerhalb liegen kann ...
    4. Next
    5. Loop Unitl ts.AtEndOfStream


    Is jetzt aber nur aus dem Kopf, habe ich schon ewig nicht gemacht.

    Edit: Sag dem Lehrer das man das nicht so macht!!

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)

    Keystore24 schrieb:

    Dim b(a) As String
    Dim a As Integer
    Dim c(d) As String
    Dim d As Integer
    Frisst das der Compiler überhaupt?
    Ich hätte jetzt gesagt, du musst die Arrays entweder leer definieren und per ReDim anpassen oder aber von vorn herein groß genug definieren.
    Oder du dimensionierst die Arrays erst dann, wenn du d eingelesen hast und weisst, wie groß das Array sein muss,

    Aber wie oben schon gesagt wurde, der ganze Ansatz ist Schrott.
    Nur weil dein Lehrer .Net nicht kennt, auf Scripting auszuweichen, ist ein Armutszeugnis.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    HI,

    das geht in VB.NET ganz einfach mit einer regex-Lösung.
    Dank an Kameo für diesen Lösungsansatz, den er in anderem Zusammenhang gegeben hat.
    Das Thema solltest Du Googlen aber hier eine kleines Programm, das Dein Problem löst.

    Spoiler anzeigen
    Imports System.Text.RegularExpressions
    ' Form mit
    ' TextBox1
    ' Button1
    ' ListBox1
    Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Zerlegen()
    End Sub

    Sub Zerlegen()
    Dim Tx As String = TextBox1.Text
    Dim grex As New Regex("\d")


    Dim _matchCol As MatchCollection = grex.Matches(Tx)
    Dim anz As Integer = _matchCol.Count
    For Each m As Match In _matchCol
    ListBox1.Items.Add(m.Value)
    Next

    End Sub
    End Class

    Lies den Text als Ganzes ein, wie auch immer der aussieht.

    Viel Spaß!

    Horst

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