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.