StringInStr() -- Fehler in der Parameterbeschreibung

    • Offizieller Beitrag

    Hi,
    mir ist folgender Fehler in der Beschreibung zu StringInStr() aufgefallen:
    StringInStr ( "string", "substring" [, casesense = 0 [, occurrence = 1 [, start = 1 [, count]]]] )
    "start" wird angegeben mit dem Standardwert "1". Das ist aber völliger Quatsch. "start" ist ein von "occurence" abhängiger Parameter und der ist nur dann "1", wenn "occurence" >= 0 ist. Bei negativem "occurence" ist "start" mit StringLen() vorbelegt.
    Hat mich fast einen ganzen Tag gekostet, diesen Fehler zu lokalisieren. Ich hatte an eine Auswertefunktion verschiedenste Abfragen übergeben, die einen String unterschiedlich analysieren. Dazu hatte ich alle optionalen Parameter, wie in der Hilfe beschrieben, vorbelegt. Unerklärlicherweise kam in der Auswertung mal Blödsinn raus und mal nicht. Beim Debuggen konnte ich dann feststellen, dass nur bei negativer "occurence" die Funktion versagte. - Nun weiss ich warum.
    Hier mal die gekürzte Funktion mit dem Fehler:

    Spoiler anzeigen
    [autoit]


    $s = "Irgendein String zum Auswerten."

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

    ; Original, Ausgabe wie erwartet, Wert für 'start' wird nicht übergeben
    $pos = StringInStr($s, ' ', 0, -2)
    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & " var: $pos --> " & $pos & @LF & "!@ " & @TAB & "#Error: " & @error & @LF)

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

    ; hier der verpackte Aufruf
    Local $a[] = ["Irgendein String zum Auswerten."]
    $pos = _Analyse(1, $a, 0, ' ', 0, -2)
    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & " var: $pos --> " & $pos & @LF & "!@ " & @TAB & "#Error: " & @error & @LF)

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

    Func _Analyse($iModus, ByRef $aVal, $iIndex, $sSubStr, $iCasesense=0, $iOccurrence=1, $iStart=1, $iCount=-1)
    Local $sString = $aVal[$iIndex]
    $iCount = ($iCount = -1) ? StringLen($sString) - $iStart : $iCount

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

    Local $result = StringInStr($s, $sSubStr, $iCasesense, $iOccurrence, $iStart, $iCount)
    Return SetError(@error,0,$result) ; kein Fehler aber Rückgabe "0" (=Substring nicht gefunden)

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

    ;~ $iStart = ($iOccurrence < 0) ? StringLen($sString) : $iStart
    ;~ Local $result = StringInStr($s, $sSubStr, $iCasesense, $iOccurrence, $iStart, $iCount) ; so funktioniert es
    ;~ Return SetError(@error,0,$result)
    EndFunc

    [/autoit]