Geht Findstring auch einfacher ?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Ironsmurf
Beiträge: 111
Registriert: 04.01.2006 12:57
Computerausstattung: AMD FX(tm)-6300 Six-Core Processor
3.50 GHz / 8 GB Ram
Windows 7 / 64bit / Ultimate
Purebasic 5.20 LTS (Windows - x86)
Wohnort: Deutschland

Geht Findstring auch einfacher ?

Beitrag 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
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag 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!
Purebasic 5.0 32bit und 64 bit

I'm back from hell
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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$!
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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 ;-).
Zuletzt geändert von edel am 24.01.2006 14:47, insgesamt 1-mal geändert.
Benutzeravatar
Ironsmurf
Beiträge: 111
Registriert: 04.01.2006 12:57
Computerausstattung: AMD FX(tm)-6300 Six-Core Processor
3.50 GHz / 8 GB Ram
Windows 7 / 64bit / Ultimate
Purebasic 5.20 LTS (Windows - x86)
Wohnort: Deutschland

Beitrag 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
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Habe es geaendert. Wenn du jetzt allerdings nicht weisst
was Struktur oder "newlist" bedeutet schau in der Hilfe nach.
Antworten