"problem" mit stringsplit bzw for next schleife bzw Stringregexp :)

  • Nabend Leute,

    ich hab grad nen kleines Problem wo ich mir irgendwie nicht sicher bin.

    Aaaalso ich habe da einen String, cool was?
    Den splitte ich mit Stringsplit auf, als trennzeichen nehme ich ein leerzeichen.

    Also trotzdem hiermal ein kleines Beispiel:

    [autoit]


    $text = "Ich übe Textverarbeitung"
    $words = Stringsplit($text," ")

    [/autoit]

    Jetzt habe ich in $words[0] die Anzahl der Worte die gefunden wurden.

    Jetzt will ich Prüfen, ob im Text das Wort "Text" drankommt.
    Jaa und da sind wir warum es mit Stringinstr nicht geht und ich es so umständlich machen muss, weil er mir ja mit stringinstr ein positiv geben würde was ja falsch wäre, da in diesem text das wort "Text" ja garnicht alleine drankommt.

    Jetzt bräuchte ich eine For-Next Schleife,
    die jedes Wort überprüft ob es = "Text" ist.

    also so ungefär:

    [autoit]


    For $i = $words[0] to 1 step -1
    If $words[$i] = "Text" then msgbox(0,"","Das Wort 'Text' wurde gefunden")
    Next

    [/autoit]

    Könnte das so stimmen?

    So würde er ja garnichts machen, da das Wort Text ja nicht vorkommt.

    Oder geht's besser mit Stringregexp?
    Mit Stringregexp hab ich noch nie gearbeitet und blick da voll nicht durch, da es ja leider auch in der deutschen Hilfe noch nicht drin ist :(

    Fragen über Fragen ..

    mfg qon

    • Offizieller Beitrag

    Hi,

    natürlich brauchst du den String nicht zu splitten. Habe dir mal ne Funktion gebaut.

    [autoit]

    $text = "Ich uebe Textverarbeitung Text aqwdqwdText"

    [/autoit][autoit][/autoit][autoit]

    If _checkWord($text, 'Text') Then MsgBox(0, "", "Text kommt vor")
    If _checkWord($text, 'uebe') Then MsgBox(0, "", "uebe kommt vor")

    [/autoit][autoit][/autoit][autoit]

    Func _checkWord($string, $word)
    If StringRegExp($string, '\b' & $word & '\b', 0) Then Return 1
    Return 0
    EndFunc ;==>_checkWord

    [/autoit]

    So long,

    Mega

  • Hi,

    ich glaube deine Funktion verlässt sich auch auf Leerzeichen hinter dem gesuchten Wort,
    hab jetzt mal selbst eine geschrieben, funzt wunderbar :)

    [autoit]


    func _wordinstr($iString,$iWord)
    $iString = Stringsplit($iString," ")
    IF @error Then
    Seterror(1)
    Return 0
    EndIf
    For $i = $iString[0] to 1 step -1
    If $iString[$i] = $iWord then Return 1
    Next
    Return 0
    EndFunc

    [/autoit]
  • Hi,

    ja das mag sein, allerdings kommt es mir TOTAL auf die Leerzeichen an, und die Strings mit denen ich das mache sind eh nicht länger als 20 Buchstaben. Allerdings könnte man ja vielleicht deine Funktion noch ein kleines bisschen ergänzen indem man schaut ob hinten am String nen Leerzeichen ist, wenn nicht macht man eins hin :)

    edit: ungefär so

    [autoit]


    Func _checkWord($string, $word)
    $string = $string & " "
    If StringRegExp($string, '\b' & $word & '\b', 0) Then Return 1
    Return 0
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    If _checkword("das ist ein test","test") = 1 then msgbox(0,"","Wort 'test' gefunden")

    [/autoit]

    oder mal mit stringinstr ( soll angeblich schneller sein als stringregexp )

    [autoit]


    Func _wordinstr($iString, $iWord)
    $iString = " " & $iString & " "
    If Stringinstr($iString," " & $iWord & " ") Then Return 1
    Return 0
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    If _wordinstr("testen","test") = 1 then msgbox(0,"Versuch 1","Wort 'test' gefunden")
    If _wordinstr("dies ist ein test","test") = 1 then msgbox(0,"Versuch 2","Wort 'test' gefunden")

    [/autoit]


    mfg

    3 Mal editiert, zuletzt von qon (26. Dezember 2007 um 02:00)