*.txt in 2D Array

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    *.txt in 2D Array

    Hallo

    ich verzweifel gerade dabei, eine *.txt einzulesen und in ein 2D Array zu bekommen

    Quellcode

    1. aaa,1,2,3
    2. bbb,2,3,4
    3. xxx,4,5,6
    ...

    My.Computer.FileSystem.ReadAllText geht zwar, aber die komplette Textdatei
    wird dabei in ein 1D Array geschrieben.

    ;(
    Erkläre uns mal genau dein Vorhaben, denn unter deine sehr oberflächlichen Erklärung verstehe ich rein garnichts.
    Außerdem

    noxx2 schrieb:

    My.Computer.FileSystem.ReadAllText geht zwar, aber die komplette Textdatei
    wird dabei in ein 1D Array geschrieben.

    ergibt das keinen Sinn, da die Methode ein String, kein Array zurückgibt.

    LG

    C#-Quellcode

    1. var s = "aaa,1,2,3\r\nbbb,2,3,4\r\nxxx,4,5,6".Split(new string[] {"\r\n"}, StringSplitOptions.None);
    2. var r = s.Select(x => x.Split(',')).ToArray();
    3. Console.WriteLine(r.GetType().FullName);
    4. Console.WriteLine(r[0][0]);
    5. Console.WriteLine(r[1][1]);
    6. Console.WriteLine(r[2][2]);


    System.String[][]
    aaa
    2
    5


    die erste zeile entsprechend mit System.IO.File.ReadAllLines("...") ersetzen um die daten aus ner datei zu lesen.
    @tolio Das ist aber ein Jagged-Array und kein 2Dim-Array. Wobei mir das egal wäre, aber trzdm zur Info.
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Warum muss es ein 2-Dimensionales Array sein?
    Da wäre eine Liste von einer eigenen Klasse/Struktur wohl besser angebracht:

    VB.NET-Quellcode

    1. Public Class DataRow
    2. Public Property Column1 As String
    3. Public Property Column2 As Integer
    4. Public Property Column3 As Integer
    5. Public Property Column4 As Integer
    6. 'Trivialen Konstruktor impliziert
    7. End Class
    8. Public Shared Function ReadStuffFromFile(FilePath As String) As List(Of DataRow)
    9. Dim Result As New List(Of DataRow)
    10. For Each i In System.IO.File.ReadLines(FilePath)
    11. Dim Parts = i.Split(","c)
    12. Result.Add(New DataRow(Parts(0), _
    13. Integer.Parse(Parts(1)), _
    14. Integer.Parse(Parts(2)), _
    15. Integer.Parse(Parts(3))))
    16. Next
    17. Return Result
    18. End Function

    Natürlich muss die Klasse und ihre Eigenschaften sinvoll benennt werden. Und abhängig vom Anwendungsfall sollte man die Eigenschaften ReadOnly und aus der Klasse eine Structure machen.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Also,

    ich habe eine Textdatei (c:\\temp\vb.txt), diese möchte in einlesen und in ein 2D Array schreiben und anschließend
    in er Tabelle (DataGridView) ausgeben.

    Die *.txt ist in etwa so aufgebaut:

    Quellcode

    1. aaa,1,2,3
    2. bbb,2,3,4
    3. xxx,4,5,6


    Quellcode

    1. Dim Daten() As String = Split(My.Computer.FileSystem.ReadAllText("c:\temp\vb.txt",",")

    ist leider nur 1D.

    Zitat entfernt. ~Thunderbolt

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Thunderbolt“ ()

    Warum muss es ein 2-Dimensionales Array sein?
    Da wäre eine Liste von einer eigenen Klasse/Struktur wohl besser angebracht

    Ich bin mir zu 98.2% sicher, dass sich ein DataGridView an eine Auflistung eigener Klassen binden lässt.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Nein....Ich komme aber nicht weiter......

    :(

    Vielleicht nochmal von vorne, da ich schon das halbe www durchsucht habe....

    1. In c:\temp liegt eine txt mit fogendem Inhalt

    Quellcode

    1. ...
    2. aaa,1a,2a,3a
    3. bbb,2b,3b,4b
    4. ccc,4c,5c,6c
    5. ...


    2. Diese Datei möchte ich einlesen, so das ich diese später wie folgt ausgeben kann

    MsgBox(Datei(0,0) ---> aaa

    MsgBox(Datei(1,0) --> bbb

    MsgBox(Datei(1,1) --> 2b

    Bin leider zu doof dafür. ;(

    noxx2 schrieb:

    ist DataRow.ReadStuffFromFile richtig?
    Ja, ist richtig. Guck doch in post#6 - da ist die Methode doch gegeben.

    Aber hier mal komplett:

    VB.NET-Quellcode

    1. Public Class myItemWith4Columns
    2. Public Property Column1 As String
    3. Public Property Column2 As Integer
    4. Public Property Column3 As Integer
    5. Public Property Column4 As Integer
    6. 'Trivialen Konstruktor impliziert
    7. Public Sub New(c1 As String, c2 As Integer, c3 As Integer, c4 As Integer)
    8. Column1 = c1 : Column2 = c2 : Column3 = c3 : Column4 = c4
    9. End Sub
    10. Public Shared Function ReadStuffFromFile(FilePath As String) As List(Of myItemWith4Columns)
    11. Dim Result As New List(Of myItemWith4Columns)
    12. For Each i In System.IO.File.ReadLines(FilePath)
    13. Dim Parts = i.Split(","c)
    14. Result.Add(New myItemWith4Columns(Parts(0), _
    15. Integer.Parse(Parts(1)), _
    16. Integer.Parse(Parts(2)), _
    17. Integer.Parse(Parts(3))))
    18. Next
    19. Return Result
    20. End Function
    21. Public Shared Sub Test(filename As String)
    22. Dim itemList = myItemWith4Columns.ReadStuffFromFile(filename)
    23. For Each itm In itemList
    24. MessageBox.Show(itm.Column1)
    25. MessageBox.Show(itm.Column2.ToString)
    26. MessageBox.Show(itm.Column3.ToString)
    27. MessageBox.Show(itm.Column4.ToString)
    28. Next
    29. End Sub
    30. End Class
    Ich hab Nicos Klasse übrigens umbenannt, um Namensverwechslung mit System.Data.DataRow zu vermeiden

    (Zu testen mit der Sub Test.)

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