Hallo
da ich noch Anfänger bin, habe ich eine bescheidene Frage
ich möchte einen dialog - Bot programmieren und setzte mich gerade mit dem FindString Befehl auseinander, gibt es vieleicht eine leichtere Variate um 2 oder 3 Wörter aus einem Satz zu filtern
String$="Hol das Pils aus dem Kühlschrank."
If FindString(String$, "Hol", 1) And FindString(String$, "Pils", 1) And FinsString(String$,"Kühlschrank",1) : Print ("Prost")
Debug "alle 3 Wörter kommen in String$ vor."
EndIf
Vilen Dank für euere Hilfe
Geht Findstring auch einfacher ?
In wie fern soll das einfacher gehen? Weniger Schreibarbeit?
Dann globalisiere die Variable String$ mit Global (s. Hilfe) und schreibe eine Prozedur, die 1 zurückgibt, wenn der String darin vorkommt:
Das ist ann wniger Schreibarbeit:die Funktion string() kannst du im weiteren Verlauf des Programms sooft anwenden, wie du willst, sie such aber immer nur in String$!
Dann globalisiere die Variable String$ mit Global (s. Hilfe) und schreibe eine Prozedur, die 1 zurückgibt, wenn der String darin vorkommt:
Das ist ann wniger Schreibarbeit:
Code: Alles auswählen
Global String$
String$="Hol mal einer dem Ironsmurf ein Pils aus dem Kühöschrank!"
Procedure string(text$)
If FindString(String$, text$, 1)
ProcedureReturn 1
Else
ProcedueReturn 0
Endif
EndProcedure
If string("Ironsmurf") And string("Pils") And string("Kühlschrank")
Debug "Jo, Chef."
Else
Debug "Was Chef?"
EndIf
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
Code: Alles auswählen
#max = 10 ; maximale groesse des arrays in der struktur tempword
Structure tempword
maxwort.l
wort.s[#max] ; #max = 10 , Array mit maximal #max eintraegen
EndStructure
;linkedlist mit der struktur tempword
NewList temp.tempword()
;einfuegen eines Elementes
AddElement(temp())
temp()\maxwort = 3
temp()\wort[0] = "HOL"
temp()\wort[1] = "PILS"
temp()\wort[2] = "KUEHLSCHRANK"
;einfuegen eines weiteren Elementes usw...
AddElement(temp())
temp()\maxwort = 3
temp()\wort[0] = "ICH"
temp()\wort[1] = "WILL"
temp()\wort[2] = "PIZZA"
Procedure match(String.s)
ForEach temp() ; die ganze! linkedlist wird durchlaufen
For i = 0 To temp()\maxwort - 1
;jedes einzelne wort der linkedlist
;im aktuellen element wird durlaufen
;und ueber findstring ,im gesamttext, gesucht
;
pos = FindString(UCase(String),temp()\wort[i],pos)
;is pos = 0 (nichts gefunden) wird die
;forschleife abgebrochen und das naechste
;element in der Liste kommt dran.
If pos = 0
Break
EndIf
;wenn i = temp()\maxwort - 1 heisst dass das
;alle woerter gefunden wurden.
If i = temp()\maxwort - 1
Debug "Gefunden > " + String
EndIf
Next ; for schleife
Next ; foreach schleife
EndProcedure
;- Test
match("Hol das Pils aus dem Kuehlschrank")
match("Hol das Pils aus dem schrank")
match("Ich will eine pizza")
verstehst du ja doch etwas von dem wirschen Zeugs

Zuletzt geändert von edel am 24.01.2006 14:47, insgesamt 1-mal geändert.