Case String.Contains("...")

  • VB.NET

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

    Case String.Contains("...")

    Hallo Community,

    nochmals brauch ich Hilfe. Ich sitz gerade an einem Chatbot, der je nach Texteingabe verschiedene Antworten ausgibt.
    Die Chatnachricht wird in einem String namens message gespeichert, und dann durch eine Funktion gejagt, die überprüft ob eine der eingespeicherten Nachrichten zutrifft, und diese Antwort dann per Return wieder zurückgibt.

    Die Funktion ist folgend aufgebaut, oben für den Fall das nichts zutrifft, ist die Antwort (msg), dass kein gültiger Befehl gefunden wurde.

    VB.NET-Quellcode

    1. Dim msg As String = "Kein gültiger Befehl!"


    Dann kommt natürlich das

    VB.NET-Quellcode

    1. Select Case message
    , und je nach Treffer wird in den msg String die Antwort gespeichert.
    Beispiel das natürlich funktioniert :

    VB.NET-Quellcode

    1. Case "uhrzeit"
    2. msg = TimeOfDay


    Nun, soweit so gut, so einfach. Ich möchte nun aber für eine mathematische Berechnung aus der Message zwei Werte auslesen, die addiert werden. Klappt soweit auch ganz gut, dank Kangaroo...

    Dazu ein Beispiel was ohne Probleme funktioniert :

    VB.NET-Quellcode

    1. Case "addieren1+2"
    2. Dim source As String = message
    3. Dim pattern As String = "addieren(?<zahl1>\d+)\+(?<zahl2>\d+)"
    4. Dim m As Match = Regex.Match(source.Replace(" ", ""), pattern)
    5. If m.Success = True Then
    6. TextBox1.Text = (String.Format("Zahl1: {0} Zahl2: {1}", m.Groups("zahl1").Value, m.Groups("zahl2").Value))
    7. End If
    8. Dim zahl1 As Integer = CInt(m.Groups("zahl1").Value)
    9. Dim zahl2 As Integer = CInt(m.Groups("zahl2").Value)
    10. msg = "Das Ergebnis von " & zahl1 & " + " & zahl2 & " ist " & zahl1 + zahl2 & "!"


    Nur möchte ich das ganze allgemein, und natürlich nicht nur für 1+2.

    Daher wollte ich auf das gute alte Contains zugreifen, was aber nicht hinhaut.

    VB.NET-Quellcode

    1. Case message.Contains("addieren")
    2. Dim source As String = message
    3. Dim pattern As String = "addieren(?<zahl1>\d+)\+(?<zahl2>\d+)"
    4. Dim m As Match = Regex.Match(source.Replace(" ", ""), pattern)
    5. If m.Success = True Then
    6. TextBox1.Text = (String.Format("Zahl1: {0} Zahl2: {1}", m.Groups("zahl1").Value, m.Groups("zahl2").Value))
    7. End If
    8. Dim zahl1 As Integer = CInt(m.Groups("zahl1").Value)
    9. Dim zahl2 As Integer = CInt(m.Groups("zahl2").Value)
    10. msg = "Das Ergebnis von " & zahl1 & " + " & zahl2 & " ist " & zahl1 + zahl2 & "!"


    Dies und auch Startswith funktioniert nicht. Der Msg String das nichts zutraf wird ausgegeben, und diese kleine Rechenfunktion überlesen.
    Meines Wissens klappte String.contains immer in Case-Abfragen...

    Hoffe mir kann wer helfen ! ;)

    Gruß

    Kuhglocke
    Also Case vergleicht ja Werte.

    Nehmen wir an

    VB.NET-Quellcode

    1. msg = "Mein Name ist Chatbot


    Was funktioniert:

    VB.NET-Quellcode

    1. Case "Mein Name ist Chatbot"

    Was nicht funktioniert:

    VB.NET-Quellcode

    1. Case msg.Contains("Chatbot")


    Wieso?? Schauen wir uns "msg.Contains("Chatbot")" genauer an.
    Was liefert es denn zurück. Es liefert kein String zurück sondern ein Boolean (true/false).

    Was natürlich nie msg entspricht.

    Du müsstest das vor oder nach dem Case Seperat abfragen mit:

    VB.NET-Quellcode

    1. If msg.Contains("Chatbot") = true Then 'Do somethingEnd If