Erweitertes StringInStr

  • Hallo,
    ich habe folgenden Satz:
    "Bringe mich nach Berlin"
    Nun soll wenn dieser Satz vorkommt (nicht 1:1 sondern wenn nur "Bring(e) mich nach" oder ähnliches vorkommt) eine bestimmte Funktion aufrufen.
    Nun wie mache ich das am geschicktesten? Der Satz kann in Tausende verschiedene Möglichkeiten geschrieben worden sein (der obere ist nur ein Beispiel)
    Ich möchte nicht:
    If StringInStr(foo,bar)
    elseIf StringInStr(bar,foo)
    elseif StringIn...
    and so on verwenden, gibt es da eine bessere Möglichkeit einen Satz mehrmals zu überprüfen?
    Anderes Problem:
    Ich hab ja jetzt diesen Satz "Bringe mich nach.." wie kann ich es lösen das ich zwar diesen Satz erkenne, und funktion xy aufgerufen wird und bei "Bringe mir xx nach yy" nicht funktion xy sondern zz aufgerufen wird.
    MFG PU

  • Da bleibt dir nix anderes übrig als jeden Fall zu prüfen. Autoit kann ja nicht richen welches nun ein Satz ist den du willst und einen den nicht willst.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Das, was du dir da vorstellst, würde wohl nur ein menschliches Gehirn effizient umsetzen können.
    Trotzdem habe ich hier ein kleines Beispiel, mit etwas weniger Schreibarbeit.

    Spoiler anzeigen
    [autoit]

    Local $a_Array[4][2] = [["Bring", "_Func1"], ["mich", "_Func2"], ["nach", "_Func3"], ["Berlin", "_Func4"]]
    Local $s_String = "Bringe mich nach Berlin"

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound ($a_Array) - 1
    If StringInStr ($s_String, $a_Array[$i][0]) Then Call ($a_Array[$i][1])
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Func _Func1 ()
    MsgBox (0, "", "Func1")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Func2 ()
    MsgBox (0, "", "Func2")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Func3 ()
    MsgBox (0, "", "Func3")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Func3 ()
    MsgBox (0, "", "Func3")
    EndFunc

    [/autoit]

    Alternativ kann man auch ein eindimensionales Array und eine einzelne Funktion verwenden...
    Dann muss man aber $i als Parameter an die Funktion übergeben und mit Switch auswerten.

  • Also zu deinem ersten Problem: Man könnte z.B. einfach prüfen, wie ähnlich die Sätze sind, beispielsweise mit der aus PHP bekannten Funktion _similar_text die hier nachgebaut wurde und eben ab einer bestimmten Prozentzahl eine Funktion aufrufen.
    Zu deinem zweiten Problem: Ich denke das lässt sich am kompfortabelsten mit regulären Ausdrücken lösen...

    Edit: wenn du case-insensitive vergleichen möchtest, dann einfach das doppelte '='-Zeichen durch ein einfaches ersetzten...