VS2019 VB:Text-Datei dynamisch in array - wie verfügbar machen?

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    VS2019 VB:Text-Datei dynamisch in array - wie verfügbar machen?

    Guten Tach :)

    Ich hab da ein Problem, das so simpel klingt, aber bisher gelingt mir die Lösung nicht.

    Es geht um ein Programm, das eine Text-Datei in ein array liest, heftig daran herumwurschtelt und sie dann unter anderem Namen speichert. Nun ist die Größe der Datei (spez. die Anzahl der Zeilen) variabel. Der Datei-Pfad wird im Hauptfenster vom Benutzer ausgesucht und an eine Funktion übergeben, die nun diese Datei lesen und in ein dynamisches array namens dt() einfügen soll. Soweit Im Prinzip kein Problem:

    VB.NET-Quellcode

    1. Public Class Hauptfenster
    2. Dim inPath As String
    3. Dim outPath As String
    4. Public Function CSVReader(p As String)
    5. Dim dt() As String = System.IO.File.ReadAllLines(p) '<<<<<<<<---------------------------
    6. End Function
    7. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Btn_SelectInFile.Click
    8. Dim ofd As New OpenFileDialog
    9. If ofd.ShowDialog() = DialogResult.OK Then
    10. inPath = ofd.FileName
    11. Txt_InFile.Text = inPath
    12. Else
    13. MessageBox.Show("Cancel")
    14. End If
    15. End Sub
    16. Private Sub Btn_SelectOutFile_Click(sender As Object, e As EventArgs) Handles Btn_SelectOutFile.Click
    17. Dim ofd As New OpenFileDialog
    18. If ofd.ShowDialog() = DialogResult.OK Then
    19. outPath = ofd.FileName
    20. Txt_OutFile.Text = outPath
    21. Else
    22. MessageBox.Show("Cancel")
    23. End If
    24. End Sub
    25. Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
    26. CSVReader(inPath)
    27. End Sub
    28. End Class


    Aber wie mache ich jetzt dieses frisch erzeugte array dt() für andere Funktionen innerhalb der Klasse verfügbar?

    Auch im weiteren Verlauf sollen weitere, dynamische arrays erzeugt werden, die von vielen anderen Klassen-Funktionen benutzt werden sollen.

    Wie kann man das erreichen?

    Danke für jede Hilfe :thumbsup:
    Indem du dt() außerhalb einer Methode deklarierst.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed

    Danke, kannste da mal ein Beispiel bringen?

    Ich hatte das schon ausprobiert und dt() oben in der Klasse mit

    Quellcode

    1. Dim dt() As String
    deklariert. Das nützt aber bei der Zuweisung durch

    Quellcode

    1. Redim dt() As String = System.IO.File.ReadAllLines(p)
    nix, weil die Größe der Datei nicht bekannt ist.

    Fehler BC30811 'Die Anweisung "ReDim" kann nicht mehr zum Deklarieren von Arrayvariablen verwendet werden.
    Fehler BC30670 'ReDim-Anweisungen erfordern eine in Klammern gesetzte Liste der neuen Grenzen jeder Arraydimension.

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

    innerhalb der Methode so.
    dt() = System.IO.File.ReadAllLines(p)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    VB.NET-Quellcode

    1. Dim dt() As StringPrivate Sub DoSomeStuff()
    2. dt = System.IO.File.ReadAllLines("MyFilePath")
    3. End Sub
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Da fehlt ein Zeilenvorschub.
    @Rakl @mrMo meint dies:

    VB.NET-Quellcode

    1. Dim dt() As String
    2. Private Sub DoSomeStuff()
    3. dt = System.IO.File.ReadAllLines("MyFilePath")
    4. End Sub
    5. Private Sub DoSomeStuff2()
    6. MessageBox.Show(dt(0))
    7. End Sub
    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!

    mrMo schrieb:

    Indem du dt() außerhalb einer Methode deklarierst.
    Das ist die unschöne Lösung, die man nur nehmen sollte, wenn nix anneres möglich.

    Hier sehe ich das aber noch nicht.

    korrekte Lösung also: das Array der anderen Methode übergeben.

    Dazu müsste der TE die andere Methode aber erstmal posten - dass man ihm zeigen kann, wie das geht.
    Hm. Irgendwie konnte ich das Problem wohl nicht rüberbringen. Die vorgeschlagenen Lösungen führten sämtlich zu Fehlermeldungen beim Debuggen.

    Wie dem auch sei: Ich hab das Problem jetzt anders gelöst. In der Methode, die die Datei in ein dynamisches array liest, hab ich direkt die gewünschten Daten extrahiert und in andere dynamische arrays einsortiert - nach dem Lesen der Datei ist die notwendige Größenangabe beim ReDim für diese anderen arrays bekannt.

    Danke jedenfalls.

    Rakl schrieb:

    führten sämtlich zu Fehlermeldungen beim Debuggen.
    Welcher Code führt zu welchen Fehlermeldungen?
    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!
    Und diese Fehlermeldung sind geheim und du kannst sie uns deshalb nicht zeigen?

    Du solltest im übrigen den Begriff „dynamisch“ häufiger verwenden.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    Rakl schrieb:

    Hm? Fehlermeldungen habe ich alle genannt.
    etwas durcheinander.

    Rakl schrieb:

    VB.NET-Quellcode

    1. Redim dt() As String = System.IO.File.ReadAllLines(p)
    machst Du

    VB.NET-Quellcode

    1. dt = System.IO.File.ReadAllLines(p)
    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!