Variablen in Schleife benutzen

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

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Digtro_77.

    Variablen in Schleife benutzen

    Hallo liebe Mitglieder!

    Nach dem ich nun verzweifelt die letzten Tage versucht habe mein Vorhaben umzusetzen und leider nicht weitergekommen bin,
    muss ich mal folgende Frage stellen:

    Ich habe mehrere Variablen vom Typ String:

    VB.NET-Quellcode

    1. Dim Daten_1_1 () As String
    2. Dim Daten_1_2 () As String
    3. Dim Daten_1_3 () As String
    4. Dim Daten_1_4 () As String
    5. bis
    6. Dim Daten_1_18 () As String


    Die erste "_1" wird noch bis "_7" benutzt.
    Also:

    VB.NET-Quellcode

    1. Dim Daten_7_1 () As String
    2. Dim Daten_7_2 () As String
    3. Dim Daten_7_3 () As String
    4. Dim Daten_7_4 () As String
    5. bis
    6. Dim Daten_7_18 () As String


    Also insgesamt: 7x18 Stringvariablen mit jeweils 5 Felder a` acht Ascii-Zeichen.

    Die Variablen werden über einen ankommenden String über:

    VB.NET-Quellcode

    1. Daten_7_18= eingabe.Split(CChar(";"))

    (wobei "eingabe" der komplette, ankommende String ist), gefüllt.

    Vom Prinzip her funktioniert das auch alles, aber natürlich ist es mühsam, für jede der Stringvariablen eine Abfrage zu erstellen.
    Ich würde das von daher gerne in einer Schleife erledigen, wobei eben die "_1_1" , "_2_5" durch eben die Angabe der Ziffern ersetzt wird.

    Ich habe dazu (weil mir nichts anderes eingefallen ist), den Variablenname als String (also "Daten_" gefolgt von x_x) zusammengesetzt.
    Später, auf der Suche wie man einen String in eine Variable wandelt vom "Erfinder des Rades" gelesen, dass es eben diese Möglichkeit der Umwandlung nicht gibt.

    Ok.
    Dann eben mit einer "List(of) arrays....der Erfolg blieb leider auch aus.
    Das letzte über das ich mich belesen habe war das "Jagged-Array".
    An der Stelle hänge ich nun immer noch und komme nicht weiter.

    VB.NET-Quellcode

    1. (eingabe = Messdaten;20180101;014000;100000)
    2. Dim Alle()() As String = New String()() {}
    3. Dim Daten_1_1() As String = eingabe.Split(CChar(";"))
    4. Alle(0) = Daten_1_1
    5. Debug.Print(Alle(0)(1))


    Bei der Ausgabe tritt: "System.IndexOutOfRangeException" auf.

    Ist das generell überhaupt der richtige Ansatz ?
    Ich will wie gesagt die Variablen in einer Schleife ansprechen und hätte mir bei dem obigen Code als Ausgabe:
    (Von Daten_1_1) 20180101 gewünscht.
    Hat jemand einen Ansatz / Hinweis / Codebeispiel für mich ?
    Danke.
    Problem ist, dass mir dann die Zuweisung fehlen würde.

    Darüber hinaus besteht ja jeder String aus 5 Feldern.
    Es sind ja Daten_1_1 bis Daten_7_18 = 126 String-Arrays mit jeweils 5 Feldern...

    Davon ab brauche ich die gefüllten Daten noch in anderen Funktion, wo ich diese direkt über die Var, sprich
    Daten_3_18(4) ansprechen will...
    Ok.
    Dann eben mit einer "List(of) arrays [...]
    Ist das generell überhaupt der richtige Ansatz ?
    Jepp, dassis definitiv der richtige Ansatz. Nur dass du nicht codest, was du sagst, was du coden willst.
    Eine List() of Array ist ja was anderes als ein jagged-Array.
    Und wie gesagt: List(of ) musses sein - nicht jagged Array, und nich 2-D-Array (wie das von Morrison):

    VB.NET-Quellcode

    1. Dim alle = New List(Of String())
    2. alle.Add(eingabe.Split(";"c) '(beachte die korrekte Notation eines Chars - das mit CChar ist doch ein Krampf)
    3. Debug.Print(alle(0)(1))

    Dass du in der anderen Funktion dann wieder mit Daten_1_1 bis Daten_7_18 herumhampeln willst ist imo nicht so schön - wieso sollte das unvermeidlich sein?
    (aber bitte bevor du darauf antwortest erstmal rückmelden, wie du mit meim Code-Ansatz klarkommst)
    Hallo ErfinderdesRades...Vielen Dank für deine Antwort und nebenbei ein großes Lob für deine Einsatzbereitschaft hier in diesem Forum.Ich finde es super, dass es Leute gibt, die unentgeldlich anderen helfen.
    Dafür ein *!
    Deinen Hinweis '(beachte die korrekte Notation eines Chars - das mit CChar ist doch ein Krampf) nehme ich dankend zur Kenntnis !!!
    Und generell (du wirst wahrscheinlich lachen),habe ich die Geschichte mit "List(of Strings)" schon gehabt - aber leider hat mein Hirn nicht erkannt, dass das wirklich auch die Lösung ist.
    Du hast natürlich völlig Recht !!! (und ich habe mich völlig verlaufen...)
    In Alle_Daten(x)(y) stehen ja bereits die empfangen und nach ";" getrennten Daten drin - somit könnte ich natürlich über Alle_Daten auch einfach darauf zugreifen.

    Allerdings setzte ich die Liste vorher zusammen und beschreibe die Arrays später, an entsprechender Stelle:

    VB.NET-Quellcode

    1. Global:
    2. Dim alle = New List(Of String())
    3. alle.Add({})
    4. alle.Add({})
    5. alle.Add({})
    6. alle.Add({})
    7. alle.Add({})
    8. alle.Add({})
    9. alle.Add({})
    10. alle.Add({})
    11. alle.Add({})
    12. später:
    13. alle(1) = (eingabe.Split(";"c))
    14. Debug.Print(alle(1)(1))


    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Digtro_77“ ()