StringInStr - Position(en) gesuchten Inhalt in String abfangen (mehrfach)

  • Hallo zusammen,

    für die Funktion StringInStr gibt es die Möglichkeit eine Position einen definierten Inhalt zu bestimmen.

    Code
    #include <MsgBoxConstants.au3>
    
    
    ; Retrieve the character position of where the string 'white' first occurs in the sentence.
    Local $iPosition = StringInStr("This is a sentence with whitespace. White is twice hier. White.", "white")
    _ArrayDisplay($iPosition)
    MsgBox($MB_SYSTEMMODAL, "", "The search string 'white' first appears at position: " & $iPosition)

    Nun wie sieht es mit mehreren Stellen aus (s. Beispiel) ?
    Danke und Gruß

  • Einfach in einer Schleife das Vorgeschlagene tun,

    Es gibt bei StringInStr einen Parameter der sich "start" nennt. Wenn Du dort die zuletzt gefundene Postion (plus 1) einträgst, dann findet der Befehl die nächste Position im String.

    bis StringInStr 0 zurückgibt.

    Grüße autoiter

  • Entweder das oder du arbeitest mit dem Occurence-Parameter. Sollte auch gehen, in etwa so:

    [autoit]


    #include <Array.au3>

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

    $sText = "CatDogBirdDogTrashpandaTigerDogCatWulfQuokkaDog"
    $sSearch = "Dog"

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

    $aPos1 = StringFindAllPos1($sText, $sSearch)
    _ArrayDisplay($aPos1, "Start-Variante")
    $aPos2 = StringFindAllPos2($sText, $sSearch)
    _ArrayDisplay($aPos2, "Occurrence-Variante")

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

    Func StringFindAllPos1($sText, $sSearch)
    ;works with "start" parameter
    Local $aPos[0]
    Local $iPos = 0
    While True
    $iPos = StringInStr($sText, $sSearch, False, 1, $iPos + 1)
    If $iPos = 0 Then ExitLoop
    _ArrayAdd($aPos, $iPos)
    WEnd
    Return $aPos
    EndFunc

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

    Func StringFindAllPos2($sText, $sSearch)
    ;works with "occurrence" parameter
    Local $aPos[0]
    Local $iCount = 1
    While True
    $iPos = StringInStr($sText, $sSearch, False, $iCount)
    If $iPos = 0 Then ExitLoop
    $iCount += 1
    _ArrayAdd($aPos, $iPos)
    WEnd
    Return $aPos

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

    EndFunc

    [/autoit]
  • Yoar gut meine Lösung wäre diese:

    Beispiel ist im Anhang.