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
Erweitertes StringInStr
-
- [ gelöst ]
-
ProblemUser -
19. April 2012 um 02:50 -
Geschlossen -
Erledigt
-
-
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.
-
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"]]
[/autoit] [autoit][/autoit] [autoit]
Local $s_String = "Bringe mich nach Berlin"For $i = 0 To UBound ($a_Array) - 1
[/autoit] [autoit][/autoit] [autoit]
If StringInStr ($s_String, $a_Array[$i][0]) Then Call ($a_Array[$i][1])
NextFunc _Func1 ()
[/autoit] [autoit][/autoit] [autoit]
MsgBox (0, "", "Func1")
EndFuncFunc _Func2 ()
[/autoit] [autoit][/autoit] [autoit]
MsgBox (0, "", "Func2")
EndFuncFunc _Func3 ()
[/autoit] [autoit][/autoit] [autoit]
MsgBox (0, "", "Func3")
EndFuncFunc _Func3 ()
[/autoit]
MsgBox (0, "", "Func3")
EndFuncAlternativ 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...
-
$k4z das ist eigentlich sehr hilfreich, ich muss zwar noch weitere Überprüfungen durchgehen, aber ich kann das ganze schonmal sehr und einkreisen und den Suchpunkt vergleichen. Vielen Dank hierfür! Damit werde ich dann mal schauen wie weit ich komme.
Dann wäre hiermit das Thema als gelöst markiert vielen dank auch an die anderen!