Frage zum Thema "Arrays in Verbindung mit .Contains"

  • VB.NET

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

    Frage zum Thema "Arrays in Verbindung mit .Contains"

    Hallo Leute!

    Wie verwende ich das Folgende richtig :

    VB.NET-Quellcode

    1. Dim felder(3) as string
    2. felder(0) = "a1"
    3. felder(1) = "a2"
    4. felder(2) = "a3"
    5. 'dann
    6. If tmp.Contains(felder(3)) Then
    7. SendToAllClients("geht")
    8. End If


    Denn so :

    VB.NET-Quellcode

    1. If tmp.Contains("a1") Then
    2. SendToAllClients("geht")
    3. End If


    Gehts...

    Und kann ich die felder() auch ausserhalb eines Methodentextes Festlegen ?
    Weil wenn ich das oben versuche also bei Dim fragen(3) as string geht das nicht...

    BITTE um Antwort !

    Viele Dank schonmal !
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..

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

    das müsste schon gehn..
    Du hast aber 3 Felder im Array (ACHTUNG! Arrayelemente fangen bei 0 an) und sprichst mit felder(3) das 4. Feld an. Das verursacht ein Fehler, da der index nicht existiert.

    ergo: 1. arrayelement = index 0, usw.
    "Wenn jemand in einem Betrieb unverzichtbar ist, dann ist dieser Betrieb falsch organisiert." - Roberto Niederer

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

    Rootbob91 schrieb:

    Hallo Leute!

    Wie verwende ich das Folgende richtig :

    VB.NET-Quellcode

    1. Dim felder(3) as string
    2. felder(0) = "a1"
    3. felder(1) = "a2"
    4. felder(2) = "a3"
    5. 'dann
    6. If tmp.Contains(felder(3)) Then
    7. SendToAllClients("geht")
    8. End If


    Denn so :

    VB.NET-Quellcode

    1. If tmp.Contains("a1") Then
    2. SendToAllClients("geht")
    3. End If


    Gehts...

    Und kann ich die felder() auch ausserhalb eines Methodentextes Festlegen ?
    Weil wenn ich das oben versuche also bei Dim fragen(3) as string geht das nicht...

    BITTE um Antwort !

    Viele Dank schonmal !
    Hi,
    Das was du sagst ist eine List(of String) denke ich und dann mit List.Item(0)
    Mfg
    Loadsoft

    VB.NET-Quellcode

    1. If tmp.EndsWith(felder(2)) Then
    2. SendToAllClients("geht")
    3. End If

    So gehts leider immer noch nicht T.T

    ich schick euch mal den "ganzen" Code bzw den nötigen :

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Module Module1
    2. Private server As TcpListener
    3. Private client As New TcpClient
    4. Private ipendpoint As IPEndPoint = New IPEndPoint(IPAddress.Any, 8000) ' eingestellt ist port 8000. dieser muss ggf. freigegeben sein!
    5. Private list As New List(Of Connection)
    6. Dim felder(120) As String
    7. Private Structure Connection
    8. Dim stream As NetworkStream
    9. Dim streamw As StreamWriter
    10. Dim streamr As StreamReader
    11. Dim nick As String ' natürlich optional, aber für die identifikation des clients empfehlenswert.
    12. End Structure
    13. Sub Main() ' main thread
    14. Console.WriteLine("Der Server läuft!")
    15. server = New TcpListener(ipendpoint)
    16. server.Start()
    17. felder(0) = "a1"
    18. felder(1) = "a2"
    19. felder(2) = "a3"
    20. While True ' wir warten auf eine neue verbindung...
    21. client = server.AcceptTcpClient
    22. Dim c As New Connection ' und erstellen für die neue verbindung eine neue connection...
    23. c.stream = client.GetStream
    24. c.streamr = New StreamReader(c.stream)
    25. c.streamw = New StreamWriter(c.stream)
    26. c.nick = c.streamr.ReadLine ' falls das mit dem nick nicht gewünscht, auch diese zeile entfernen.
    27. list.Add(c) ' und fügen sie der liste der clients hinzu.
    28. Console.WriteLine("[" & TimeOfDay & "]" & " <" & c.nick & "> " & " has joined.")
    29. ' falls alle anderen das auch lesen sollen können, an alle clients weiterleiten.
    30. Dim t As New Threading.Thread(AddressOf ListenToConnection)
    31. t.Start(c)
    32. End While
    33. End Sub
    34. Private Sub ListenToConnection(ByVal con As Connection)
    35. Do
    36. Try
    37. Dim tmp As String = con.streamr.ReadLine ' warten, bis etwas empfangen wird...
    38. Console.WriteLine("[" & TimeOfDay & "] " & con.nick & " :" & tmp)
    39. SendToAllClients("[" & TimeOfDay & "] " & con.nick & " :" & tmp)
    40. If tmp.StartsWith("/a") Then
    41. If tmp.EndsWith(felder(2)) Then
    42. SendToAllClients("geht")
    43. End If
    44. End If
    45. Catch ' die aktuelle überwachte verbindung hat sich wohl verabschiedet.
    46. list.Remove(con)
    47. Console.WriteLine("[" & TimeOfDay & "] " & con.nick & " has left the chat.")
    48. SendToAllClients("[" & TimeOfDay & "] " & con.nick & " has left the chat.")
    49. Userlist()
    50. Exit Do
    51. End Try
    52. Loop
    53. End Sub
    54. Private Sub SendToAllClients(ByVal s As String)
    55. For Each c As Connection In list ' an alle clients weitersenden.
    56. Try
    57. c.streamw.WriteLine(s)
    58. c.streamw.Flush()
    59. Catch
    60. End Try
    61. Next
    62. End Sub
    63. Public Sub Userlist()
    64. Dim users As String = ""
    65. For Each Connections In list
    66. users = users & Connections.nick.ToString & ","
    67. SendToAllClients("/u " & users)
    68. Next
    69. End Sub
    70. Private Sub Sendtoperson(ByVal s As String, ByVal Nick As String)
    71. For Each Connection In list
    72. Try
    73. If Connection.nick = Nick Then
    74. Connection.streamw.WriteLine(s)
    75. Connection.streamw.Flush()
    76. End If
    77. Catch
    78. End Try
    79. Next
    80. End Sub
    81. End Module


    @ Load-soft.ch.vu :
    Ich weiss zwar nicht so genau was du damit meinst aber danke schonmal für die Anwort .
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..

    milaim schrieb:

    das müsste schon gehn..
    Du hast aber 3 Felder im Array (ACHTUNG! Arrayelemente fangen bei 0 an) und sprichst mit felder(3) das 4. Feld an. Das verursacht ein Fehler, da der index nicht existiert.

    ergo: 1. arrayelement = index 0, usw
    .



    VERGISST DAS HIER SCHNELL WIEDER!!

    Hab ja völlig vergessen, dass bei Visual basic der Index bei der definition angegeben wird.

    Hast doch 4 elemente...!!

    Jedoch darf der Parameter nicht Nothing sein, den du bei Contains übergibst.

    //Edit: Das heisst du musst beim letzten element was reinschreiben im array.
    "Wenn jemand in einem Betrieb unverzichtbar ist, dann ist dieser Betrieb falsch organisiert." - Roberto Niederer

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

    VB.NET-Quellcode

    1. Dim felder(2) as string
    2. felder(0) = "a1"
    3. felder(1) = "a2"
    4. felder(2) = "a3"


    aber das letzte Element (2) ist doch beschrieben mit a3 ?

    Oder verstehe ich das jetzt falsch?


    EDIT*

    Bin ich dämlich...

    VB.NET-Quellcode

    1. If tmp.Contains(felder(2)) Then
    2. SendToAllClients("geht")
    3. End If

    Hiermit spreche ich ja das "2te" feld an... wenn ich dann a3 eingebe ist das richtig...

    Aber wie mache ich das das gesamte array überprüft wird?
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    Dim arr(3) As String ergibt:
    arr(0), arr(1), arr(2), arr(3) -> 4 elemente.

    d.h. felder(3) ist bei dir Nothing, also musst du felder(3) = "a4" eingeben, damit contains keine Exception wirft.
    "Wenn jemand in einem Betrieb unverzichtbar ist, dann ist dieser Betrieb falsch organisiert." - Roberto Niederer
    Das ist alles schon richtig deklariert bzw "beschrieben"

    Sonst würde es ja auch nicht gehen wenn ich
    einfach a3 schreibe was felder(2) entspricht !

    Nur der überprüft nicht alles sondern nur genau felder(2)
    Der soll aber das ganze array überprüfen .
    Hier

    VB.NET-Quellcode

    1. If tmp.Contains(felder(2)) Then
    2. SendToAllClients("geht")
    3. End If




    Nur wenn ichs so schreibe :

    VB.NET-Quellcode

    1. If tmp.Contains(felder()) Then
    2. SendToAllClients("geht")
    3. End If


    Dann kommt : Die Indexanzahl ist kleiner als die Anzahl der Dimensionen bla bla...
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..

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

    Es wird per Client ein string gesendet ( tmp )

    Wenn der empfangen wird soll geprüft werden ob ein string vom array felder,
    mit tmp übereinstimmt .


    VB.NET-Quellcode

    1. Dim felder(2) as string
    2. felder(0) = "a1"
    3. felder(1) = "a2"
    4. felder(2) = "a3"
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    Dann probiers mal so:

    VB.NET-Quellcode

    1. Dim arrayIndex As Integer = -1
    2. For i=0 to felder.Length-1
    3. If tmp.Contains(felder(i)) Then
    4. arrayIndex = i
    5. Exit For
    6. End If
    7. Next
    8. If arrayIndex <> -1 Then
    9. 'was auch immer du machen willst...
    10. End If
    Wenn ich das so lese, fällt mir irgendwie "three blind mice" ein ...

    Beispiel-Lösung:

    VB.NET-Quellcode

    1. Private Class ergebnis
    2. Public index As Integer
    3. Public wort As String
    4. End Class
    5. Private Sub foo()
    6. Dim tmp As String = "the quick brown fox jumps over the lazy dog"
    7. Dim a() As String = Split("mein brown hut der hat drei fox ecken", " ")
    8. Dim r As IEnumerable(Of ergebnis) = From s In a Where tmp.Contains(s) Select New ergebnis With {.index = tmp.IndexOf(s), .wort = s}
    9. For Each e As ergebnis In r
    10. Debug.Print(String.Format("Der String enthält {0} an Position {1}", e.wort, e.index))
    11. Next
    12. End Sub


    findet alle Wörter in "a()", die in tmp enthalten sind und gibt sie aus.

    Output:

    Quellcode

    1. Der String enthält brown an Position 10
    2. Der String enthält fox an Position 16