Dynamisches mehrdimensionales Array erstellen, Hilfe bei der Deklaration; Umsetzung

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Akki.

    Dynamisches mehrdimensionales Array erstellen, Hilfe bei der Deklaration; Umsetzung

    Hallo VB Freunde,


    ich will mir ein Dynamisches mehrdimensionales Array vom typ Integer erstellen.

    Dabei soll die Variable Anzahl, die Spaltenanzahl des Array bestimmen.

    Als Beispiel, wenn die variable Anzahl=3 ist, soll das Array k Zeilen jedoch 3 spalten besitzen, um drei werte aufnehmen zu können.


    Pseudocode darstellung:

    VB.NET-Quellcode

    1. Arr(11,22,33) ' Bsp. So soll es dann aussehen , in diesem Fall soll das Array 3 Werte abspeichern können




    Siehe Pseudocode was ich bis jetzt habe:

    VB.NET-Quellcode

    1. Dim Anzahl As Integer =3 'Ändert sich, hier nur als Bsp. Wert 3
    2. Dim k As Integer = 180 'Ändert sich, hier nur als Bsp. Wert 180
    3. 'Arraydeklaration: Wie soll ich jetzt machen?
    4. Dim iArr('dynamisch) As Integer



    Wichtig ist das es dynamisch ist und das so viele Spalten zum Speichern existieren. wie der Wert der Variable Anzahl ist.
    Es muss kein Array sein bin auch für eine andere Alternative offen jedoch soll das Schema enthalten bleiben.


    Vielen Dank für eure Hilfe

    Gruß,

    Akki
    Hey,

    erklär mal, was Du damit speichern möchtest und für welchen Zweck, dann kann man über Alternativen nachdenken...
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Ich suche in einem String nach einem "&-Zeichen". Sobald ein und auftaucht merke ich mir die position. das sind dann die werte die speichern möchte.

    Das mache ich so:

    VB.NET-Quellcode

    1. Dim BspString As String="Ich&DU&123"
    2. For i = 0 To BspString.Length - 1
    3. If BspString.ElementAt(i) = "&" Then
    4. pos = i
    5. PositionsListe.Add(pos)
    6. End If
    7. Next i

    Zusätzlich treffe ich vorher schon eine Aussage darüber, wie viele "&-Zeichen" überhaupt in dem String enthalten sind. das ist meine Anzahl variable

    Das mache ich so:

    VB.NET-Quellcode

    1. Str1 = Split(BspString, "&")
    2. Anzahl = UBound(Str1)


    BspString: Ich&DU&123

    Zweck: Um jetzt dann für die spätere bearbeitung brauche ich den Bezug dazu das ich (siehe oberen bsp.) 2 "& -zeichen" habe und diese einmal in der 3.Position ist und einmal in der 6. Position ist.

    Damit ich dann später einen Vergleich machen kann brauche ich diesen Bezug und wollte daher es in einem array abspeichern

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

    VB.NET-Quellcode

    1. Anzahl = UBound(Str1)

    ist logisch gesehen sowieso falsch, da es den höchsten Index angibt und nicht die Anzahl.

    VB.NET-Quellcode

    1. Anzahl = Str1.Count

    Gibt dir die Anzahl aus.


    Zum Problem, bau dir einfach eine Klasse mit den benötigten Properties und serialisiere diese nach {XML/YAML,whatever}

    Dann brauchst nach keinem "&" mehr zu suchen, sondern kannst mit richtigen Namen arbeiten.

    Demo Settings:

    VB.NET-Quellcode

    1. <Serializable()>
    2. Public Class TestSettings
    3. Public Property Groeße As Double = 150
    4. Public Property Datum As Date = Date.Now
    5. Sub New()
    6. End Sub
    7. Sub New(ByVal Groeße As Double)
    8. Me.Groeße = Groeße
    9. End Sub
    10. Sub New(ByVal Groeße As Double, ByVal Datum As Date)
    11. Me.Groeße = Groeße
    12. Me.Datum = Datum
    13. End Sub
    14. End Class


    Serialisation:

    VB.NET-Quellcode

    1. Public Class Serialisation
    2. Public Shared Sub Serialisieren(ByVal pfad As String, ByVal Objekt As Object)
    3. Using FS As New FileStream(pfad, FileMode.Create, FileAccess.Write, FileShare.None)
    4. Dim XMLSeri As New XmlSerializer(Objekt.GetType)
    5. XMLSeri.Serialize(FS, Objekt)
    6. End Using
    7. End Sub
    8. Public Shared Sub Serialisieren(ByRef OutStream As Stream, ByVal Objekt As Object)
    9. Dim XMLSeri As New XmlSerializer(Objekt.GetType)
    10. XMLSeri.Serialize(OutStream, Objekt)
    11. End Sub
    12. Public Shared Function DeSerialisieren(Of T)(ByVal pfad As String) As T
    13. Using FS As New FileStream(pfad, FileMode.Open, FileAccess.Read, FileShare.Read)
    14. Dim XMLSeri As New XmlSerializer(GetType(T))
    15. Return DirectCast(XMLSeri.Deserialize(FS), T)
    16. End Using
    17. End Function
    18. Public Shared Function DeSerialisieren(Of T)(ByVal InputStream As Stream) As T
    19. Dim XMLSeri As New XmlSerializer(GetType(T))
    20. Return DirectCast(XMLSeri.Deserialize(InputStream), T)
    21. End Function
    22. End Class


    Testaufruf:

    VB.NET-Quellcode

    1. Module MainProgram
    2. Friend s As New TestSettings
    3. Sub main()
    4. s = New TestSettings(150, Date.ParseExact("15.06.2011", "dd.mm.yyyy", New Globalization.CultureInfo("DE-de")))
    5. Serialisation.Serialisieren("c:\settings.xml", s)
    6. s = Nothing
    7. s = Serialisation.DeSerialisieren(Of TestSettings)("c:\settings.xml")
    8. MsgBox(s.Groeße.ToString & vbCrLf & s.Datum.ToShortDateString)
    9. End Sub
    10. End Module
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D
    Hey,

    ich würd das mit Hilfe einer Klasse erledigen. Hab Dir mal schnell ein Beispiel getippt.

    VB.NET-Quellcode

    1. Public Class StringInfo
    2. Private _charCount As Integer
    3. Public ReadOnly Property charcount As Integer
    4. Get
    5. Return _charCount
    6. End Get
    7. End Property
    8. Private _positionList As New List(Of Integer)
    9. Public Property positionList As List(Of Integer)
    10. Get
    11. Return _positionList
    12. End Get
    13. Set(value As List(Of Integer))
    14. _positionList = value
    15. End Set
    16. End Property
    17. Private _stringToSearch As String
    18. Public ReadOnly Property stringToSearch As String
    19. Get
    20. Return _stringToSearch
    21. End Get
    22. End Property
    23. Private _matchChar As Char
    24. Public ReadOnly Property matchChar As Char
    25. Get
    26. Return _matchChar
    27. End Get
    28. End Property
    29. Public Sub New(ByVal stringToSearch As String, ByVal match As Char)
    30. _stringToSearch = stringToSearch
    31. _matchChar = match
    32. InvestigateStirng()
    33. End Sub
    34. Private Sub InvestigateStirng()
    35. Dim x = (From c1 As Char In Me.stringToSearch Select c1 Where c1 = Me.matchChar).Count
    36. _charCount = CInt(x)
    37. For i As Integer = 0 To Me.stringToSearch.Length - 1
    38. If Me.stringToSearch(i) = matchChar Then
    39. Me.positionList.Add(i)
    40. End If
    41. Next
    42. End Sub
    43. End Class


    Zu verwenden ist das Ganz dann so:

    VB.NET-Quellcode

    1. Dim sI As New StringInfo("lkjas&lkajlfök/&lkajsf&lkjasökjd&", "&"c)


    Du übergibst im Konstruktor den String, den Du untersuchen willst und das Zeichen, nach dem gesucht werden soll. Die Property "charCount" enthält die Anzahl der Vorkommen des Zeichens und die Property "positionList" ist eine List (Of Integer), die die Positionen enthält.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o