Seite 1 von 1
Geht Findstring auch einfacher ?
Verfasst: 23.01.2006 17:59
von Ironsmurf
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
Verfasst: 23.01.2006 19:15
von roherter
Mach doch ne Procedure daraus!
Kann dir ja ein Beispiel machen wenn du willst geht aber erst so in 2stunden vorher habe ich keine zeit!
Verfasst: 23.01.2006 19:20
von AND51
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:
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
die Funktion
string() kannst du im weiteren Verlauf des Programms sooft anwenden, wie du willst, sie such aber immer nur in
String$!
Verfasst: 23.01.2006 22:10
von edel
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")
Ich hab zuspaet gesehen das es im Anfaengerforum steht aber vielleicht
verstehst du ja doch etwas von dem wirschen Zeugs

.
Verfasst: 24.01.2006 11:07
von Ironsmurf
Hallo
sieht gut aus, leider habe ich noch nicht alles verstanden, ich wäre dir dankbar wenn du vieleicht die Programmzeilen etwas kommentieren könntest.
Bis dann - und vielen Dank
Verfasst: 24.01.2006 14:50
von edel
Habe es geaendert. Wenn du jetzt allerdings nicht weisst
was Struktur oder "newlist" bedeutet schau in der Hilfe nach.