x Variablen in Loop erstellen

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Niko Ortner.

    x Variablen in Loop erstellen

    Hey,

    ich würde gerne eine vorher unbestimmte Art von Variablen in einer Schleife erstellen.
    Ich habe ein Verzeichnis wo eine gewisse Anzahl von Daten liegen, die später ausgelesen werden müssen und der Inhalt jeweils in ein array gepackt werden soll. Datei 1 soll also in array_1, Datei 2 in array_2, etc.
    Da ich aber nicht explizit array_1 bis sagen wir 5 erstellen will (da das flexibel sein soll, wenn man Dateien hinzufügt), würd ich das gern flexibel machen.

    Nur kann man irgendwie Variablennamen nicht mithilfe eines Loops vergeben:

    VB.NET-Quellcode

    1. 'Dateien zählen die eine gewisse Endung haben
    2. ...
    3. For i as integer = 1 to file_count
    4. dim array_i() as string
    5. Next


    Das klappt leider nicht weil er i immer als Teil des Namens ansieht.
    Wie kann ich wie gewünscht eine gewisse Anzahl an Arrays erstellen wo ich die Anzahl per integer vorgebe?
    Wieso nicht die Datei in ein Array lesen??

    variable(0) = "inhalt datei 1"
    variable(1) = "inhalt datei 2"
    variable(2) = "inhalt datei 3"
    variable(3) = "inhalt datei 4"
    variable(n) = "inhalt datei n"

    Ansonsten nimmst du den Typ Dictionary.

    Eierlein schrieb:

    VB.NET-Quellcode

    1. dim MeinArray(1 to file_count) as string
    2. For i as integer = 1 to file_count
    3. Mein Array(i) = xxxx
    4. Next

    Danke :)

    Kann ich dieses Schachtelarray als string deklarieren wenn meine einzelnen Hauptarrays structures enthalten (unter anderem mit strings, integern und double-Werten)?
    vlt. ist auch hier wieder ein relationales Datenmodell angesagt.

    Ein solches kann man so gestalten, dasses Tabellen gibt mit Datensätzen, und jeder Datensatz enthält wieder eine Auflistung weiterer Datensätze eines anneren Datensatz-Typs.
    So ein Datensatz kann alle möglichen Datentypen enthalten, strings, Integer, DateTime - was du wolle.

    Das ganze kann man in einer Datei abspeichern, sodass man nicht das Dateisystem als Datenbank mißbrauchen muß, und ist unvergleichlich performanter.
    Hier mal ein grafisches Model von meiner Situation (Thema ist anders, aber so sicherlich gut verständlich)



    die zwei unteren Ebenen sind soweit logisch, ich weiss jetzt nur nicht, wie ich die Saisons deklarieren soll.
    Man müsste ja Dim saison() as ... und ich weiss halt nicht als was, weil es ja eigentlich keine structure als direktes Kind hat, sondern ein array, was wiederum die Structure als Kind hat.

    Zur Lösung kommen momentan nur Strukturen oder Arrays in Frage. Sollte ja eigentlich machbar sein, aber ich steh was auf dem schlauch. In meinem Modell sind wohl die Anzahl der Saisons als auch die Anzahl der Spieltage nicht fix sondern hängen von der jeweiligen Datei ab, daher kann ich also nicht Spieltag 1-34 in eine Structure packen.

    VB.NET-Quellcode

    1. Structure Spieldaten
    2. End Structure
    3. Dim Spieltag As List(Of Spieldaten)
    4. Dim Saison As List(Of Spieltag)


    Ich habe mal Listen genommen, lassen sich einfacherer händeln als Arrays. Lassen sich aber genauso ansprechen.
    So hast du nun ein 2-Dimensionales Array

    VB.NET-Quellcode

    1. Dim aktuell As Spieldaten = Saison(0)(1)


    würde dir jetzt den 2. Speiltag der 1 Saison holen.
    Eigentlich nicht so schwer.
    Du deklarierst eine List(Of ...). Diese ist die Auflistung aller "Saisons", also aller Dateien.
    Die "Spieltage" sind ihrerseits entweder Strings, wenn es nur um den Inhalt der Dateien geht, oder String-Arrays, wenn es zeilenweise sein soll, oder was weiß ich.

    Darum:

    VB.NET-Quellcode

    1. Sub...
    2. Dim AllFiles As New List(Of ...)
    3. For Each i As String In System.IO.Directory.GetAllFiles("Ordnerpfad")
    4. AllFiles.Add(System.IO.File.ReadAllText(i)) 'Oder System.IO.File.ReadAllLines(i), etc...
    5. Next

    Jetzt bleibt noch die Frage wie Du weißt, welche Dateien es sind. Das mit System.IO.Directory.GetAllFiles("Ordnerpfad") war nur ein Beispiel. Hier geht es einfach darum, dass irgendwoher die Dateinamen kommen müssen.

    Edit: ErfinderDesRades hat natürlich auch gute Lösungen. Ich persönlich komme mit DataSets halt nicht klar. Und ich frage mich, ob ein Dataset zum Einlesen von ein paar Dateien nicht etwas übertrieben ist.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    VB.NET-Quellcode

    1. Public Class Form1
    2. Structure kindliste
    3. Dim zahl As Integer
    4. Dim wort As String
    5. End Structure
    6. Dim oma As List(Of List(Of kindliste))
    7. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    8. oma(0)(0) = 1
    9. oma(0)(1) = "test"
    10. End Sub
    11. End Class


    Bekomme jetzt noch jeweils ein error beim Zuweisen der Werte
    Value of type 'Integer' cannot be converted to 'WindowsApplication1.Form1.kindliste'.

    Habe mal gegooglet und mir dieser (0)(0) Schreibweise sollte man eigetnlich die Werte zuweisen können (docstoc.com/docs/2189752/VB-List(Of-type))
    @Berbatov: Wofür werden die Dateien verwendet?
    Zum Speichern von Einstellungen? Oder werden da Daten gesammelt?
    Von Deinem Programm? Oder von anderen Programmen?

    Das ist entscheidend für ErfinderDesRades' Vorschlag mit dem DataSet.
    das ganze Dataset würde aus einer einzigen Datei gelesen


    Falls da aber z.B. Messwerte von einem anderen Programm drinstehen wirds mit dem Dataset wohl etwas schwierig.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils