Array aus txt Datei erstellen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Kangaroo.

    Array aus txt Datei erstellen

    Guten Tag,
    ich bin schon etwas dran, ein selber abgespeichertes Array wieder in mein Programm zu laden. Das Array sieht folgendermaßen aus:

    Quellcode

    1. 0,472 0,389 0,169 0,564 0,378 0,201 0,468 0,6670,336 0,329 0,083 0,82 0,344 0,773 0,015 0,290,934 0,269 0,998 0,077 0,575 0,346 0,297 0,1790,532 0,474 0,912 0,333 0,806 0,919 0,844 0,0690,13 0,414 0,827 0,855 0,036 0,226 0,126 0,6920,994 0,354 0,741 0,111 0,002 0,799 0,408 0,5810,592 0,56 0,656 0,368 0,233 0,372 0,955 0,2050,19 0,5 0,571 0,624 0,464 0,944 0,237 0,0940,788 0,44 0,485 0,88 0,429 0,517 0,784 0,9830,386 0,645 0,4 0,137 0,66 0,09 0,066 0,6070,25 0,585 0,314 0,393 0,891 0,397 0,613 0,4960,848 0,791 0,229 0,649 0,122 0,97 0,895 0,1190,446 0,731 0,143 0,906 0,087 0,543 0,442 0,0080,045 0,671 0,058 0,162 0,318 0,115 0,724 0,8980,908 0,876 0,972 0,418 0,549 0,688 0,271 0,521



    Es war ein 15x8 Array welches nach jeder 4 stelligen Zahl durch ein " " unterbrochen wird.

    Ich hatte hiermit angefangen:

    Quellcode

    1. Dim ofd As New OpenFileDialog ofd.Filter = "Textdateien (*.txt) | *.txt" ofd.ShowDialog()
    2. If ofd.FileName <> "" Then Dim la As New System.IO.StreamReader(ofd.FileName) ' Datei als StreamReader öffnen Dim b(la.BaseStream.Length) As Char ' einen Buffer für den Dateiinhalt anlegen Dim C() As Char = {" "} ' Ein Array mit den Zeichen, an denen gesplittet werden soll Dim s As String ' Der String für den Dateiinhalt Dim Neur_Netz() As String ' Das Array für die einzelnen Zahlen (als Strings) Dim I As Integer ' Schleifenvariable (für FOR...NEXT) Dim Zahl As Double ' Eine Variable für Zahl
    3. la.ReadBlock(b, 0, la.BaseStream.Length) ' Den gesamten Dateiinhalt in den Buffer einlesen s = Convert.ToString(b) ' In einen String konvertieren Neur_Netz = s.Split(C) ' In ein String-Array konvertieren
    4. la.Close() ' SreamReader wieder schließen
    5. 'Array durchlaufen und die einzelnen Strings in Zahlen umwandeln For I = 0 To UBound(Neur_Netz) Zahl = Convert.ToDouble(Neur_Netz(I)) Console.Write(Zahl.ToString) Next I
    6. End If



    Das hatte ich mir zusammen gezimmert, kam jedoch nicht zu meinem Ergebnis.
    Bis zum

    Quellcode

    1. s = Convert.ToString(b) ' In einen String konvertieren


    funktioniert auch noch alles, es entsteht ein String mit allen Zeichen, in dem die Zahlen durch " " abgetrennt sind und die Zeilenumbrüche durch " " + " ".

    Wie verfahre ich nun weiter? Ich muss den String ja jetzt "nurnoch" in ein Array umschreiben, gelesen ist er ja noch....

    Ich bedanke mich schonmal für die Hilfe
    Hey.

    Die einzelnen Zahlen sind durch ein einzelnes, und Zeilenumbrüche durch ein doppeltes Leerzeichen abgetrennt?
    Dann brauchst du die Datei nur lesen und mit der Split()-Methode splitten. Kleines Beispiel:

    VB.NET-Quellcode

    1. ' erstmal alle Zeilen der Datei in ein Array laden
    2. Dim Inhalt() As String = System.IO.File.ReadAllLines("datei")
    3. ' Liste definieren, in der wir die Zahlen speichern werden
    4. Dim ZahlenListe As New List(Of String)
    5. For Each Zeile As String In Inhalt ' für jede Zeile
    6. ZahlenListe.AddRange(Zeile.Split(" "c, StringSplitOptions.RemoveEmptyEntries)) ' die Zeile bei Leerzeichen teilen und der Liste mit den Zahlen hinzufügen
    7. Next
    8. Dim ZahlenArray() As String = ZahlenListe.ToArray() ' ... und fertig ist das Array mit allen Zahlen
    Hi und willkommen im Club,

    ich mag mich gerade wegen Grippe nicht durch Deinen Code fressen, insofern würde es helfen wenn Du sagen würdest wie denn Dein Ergebnis aussehen sollte, z.B.:
    - ein Array mit den Zahlen zwischen den Kommata, wobei das Leerzeichen ignoriert werden soll ?

    Hilfe dazu gibt es durch die String.Split-Funktion oder die alte Split-Methode aus dem VisualBasic Namespace. Beide splitten Dir den String so auf wie Du möchtest.

    Mit string.Replace(" ","") eliminierst Du die Leerzeichen, wenn Du willst.
    Hmmm warum sieht mein Code so unordentlich aus?
    Normalerweise ist der geordneter, zumindest in meinem VB2010

    Okay also ich habe ein Array 15x8
    Dieses ist bereits geladen und in einen String kopiert.

    Quellcode

    1. la.ReadBlock(b, 0, la.BaseStream.Length) s = Convert.ToString(b) Neur_Netz = s.Split(C)



    Im Codeauszug ist zu sehen
    In s wird der String b kopiert
    dieser wird mit s.Split(C) gesplittet.
    Problem sind die Zeilenumbrüche die Doppelte Leerzeichen enthalten.
    Im Dateianhang ist zu erkennen wie das Array Neuronales_Netz aussieht.

    Wie es nun aussehen soll:
    Entstehen soll ein 15x8 Array (Zeilenumbruch an den zwei leerzeichen)

    Wenn ich allerdings auch ein Array hinbekomme was eindimensional ist und die doppellehrzeichen ignoriert, dann kann ich das ganze
    Bilder
    • Unbenannt.JPG

      71,46 kB, 511×600, 182 mal angesehen

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

    haiyyu schrieb:



    For Each Zeile As String In Inhalt ' für jede Zeile
    ZahlenListe.AddRange(Zeile.Split(" "c, StringSplitOptions.RemoveEmptyEntries)) ' die Zeile bei Leerzeichen teilen und der Liste mit den Zahlen hinzufügen
    Next


    Fehler 1 Fehler bei der Überladungsauflösung, da keine zugreifbare "Split" mit diesen Argumenten aufgerufen werden kann:
    "Public Function Split(separator() As String, options As System.StringSplitOptions) As String()": Der Wert vom Typ "Char" kann nicht in "1-dimensionales Array von String" konvertiert werden.
    "Public Function Split(separator() As Char, options As System.StringSplitOptions) As String()": Der Wert vom Typ "Char" kann nicht in "1-dimensionales Array von Char" konvertiert werden.
    "Public Function Split(separator() As Char, count As Integer) As String()": Der Wert vom Typ "Char" kann nicht in "1-dimensionales Array von Char" konvertiert werden.
    "Public Function Split(ParamArray separator() As Char) As String()": System.StringSplitOptions-Werte können nicht in "Char" konvertiert werden. Verwenden Sie Microsoft.VisualBasic.ChrW, um einen numerischen Wert als Unicode-Zeichen zu interpretieren, oder konvertieren Sie ihn zuerst zu "String", um eine Ziffer zu erstellen. C:\Dokumente und Einstellungen\Chris\Desktop\Diplomarbeit\Programm\Tests mit Neuronalen Netzen\Tests mit Neuronalen Netzen\L_Neuro.vb 117 38 Tests mit Neuronalen Netzen
    @Bahaoth die String-Split Methode erwartet als Argument ein CharArray, wobei nach jedem einzelnen Character dieses Arrays gesplittet wird.

    Ersetze mal :

    VB.NET-Quellcode

    1. ZahlenListe.AddRange(Zeile.Split(New Char() {" "c}, StringSplitOptions.RemoveEmptyEntries)) ' die Zeile bei Leerzeichen teilen und der Liste mit den Zahlen hinzufügen

    Wobei ein char-Array mit genau 1 Member erzeugt und gleich initialisiert wird.

    Hätte der Compiler allerdings schon vor der Ausführung anmeckern müssen ...