Quotierung in Strings durch Klammern ersetzen

    • Offizieller Beitrag

    Hi,
    hier ein 'Nebenprodukt' aus meinem Projekt 'SQLite Administration'.
    In einem gegebenen String wird die Quotierung von Stringelementen durch Klammern ersetzt.
    Entweder im gesamten String oder einem definierten Bereich Von - Bis.
    - Übergabe String
    - Übergabe Quotierungszeichen (' oder "), auch ASCII-Wert möglich
    - Übergabe des öffnenden Klammersymbols, auch ASCII-Wert möglich
    - optional: Startposition im String
    - optional: Endpostion im String
    - Rückgabe String mit ausgeführten Ersetzungen, falls Quotierungszeichen nicht enthalten ==> Originalstring

    (Eigentlich sind es nur 3 Zeilen Code :D - aber um es variabel zu gestalten, muß man doch etwas 'drumherum' bauen. ;) )

    Beispiel
    [autoit]

    $s = 'Tralla "abc" - "bde" "haha" xyz "1234" halleluja'
    $s1 = "Tralla 'abc' - 'bde' 'haha' xyz '1234' halleluja"

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

    ; alle Quotierungen durch '[ ]' ersetzen:
    ConsoleWrite(_ReplQuoteWithBrackets($s, '"', '[') & @CRLF)
    ; ab dem "-" ersetzen mit '( )':
    ConsoleWrite(_ReplQuoteWithBrackets($s1, "'", '(', StringInStr($s, '-') ) & @CRLF)
    ; bis zum "xyz" ersetzen mit '{ }':
    ConsoleWrite(_ReplQuoteWithBrackets($s, '"', '{', -1, StringInStr($s, 'xyz') ) & @CRLF)

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

    #cs
    ergibt:

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

    Tralla [abc] - [bde] [haha] xyz [1234] halleluja
    Tralla 'abc' - (bde) (haha) xyz (1234) halleluja
    Tralla {abc} - {bde} {haha} xyz "1234" halleluja

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

    #ce

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

    ;===============================================================================
    ; Function Name: _ReplQuoteWithBrackets($sString, $sQuot, $sBrack [, $iFrom=1 [, $iTo=-1]])
    ; Description:: Ersetzt paarige Quotierung in einem String durch paarige Klammern
    ; Parameter(s): $sString der zu bearbeitende String
    ; $sQout zu ersetzendes Quotierungszeichen (' oder "), kann auch als ASCII-Wert übergeben werden
    ; $sBrack öffnende Klammer für die Ersetzung, kann auch als ASCII-Wert übergeben werden
    ; optional $iFrom Startposition für Ersetzung im String, Standard= 1
    ; optional $iTo Endposition für Ersetzung im String, Standard= -1 (Stringende)
    ; Für die optionalen Parameter kann als Standardwert auch Default od. -1 übergeben werden
    ; Note: Sollten $iFrom oder $iTo außerhalb eines sinnvollen Bereiches liegen, werden sie
    ; auf maximal möglichen Bereich angepaßt.
    ; Enthält der String keine Quotierung, wird der Originalstring zurückgegeben.
    ; Return Value(s): Erfolg Der String mit Klammern statt Quotierung
    ; Fehler 0 @error= 1 übergebenes Zeichen/ASCII-Wert für Quotierung ist falsch
    ; @error= 2 übergebenes Zeichen/ASCII-Wert für Klammer ist falsch
    ; Author(s): BugFix
    ;===============================================================================
    Func _ReplQuoteWithBrackets($sString, $sQuot, $sBrack, $iFrom=1, $iTo=-1)
    If $iFrom < 1 Or $iFrom = Default Then
    $iFrom = 1
    ElseIf $iFrom > StringLen($sString) -3 Then
    $iFrom = StringLen($sString) -3
    EndIf
    If $iTo > StringLen($sString) Or $iTo = -1 Or $iTo = Default Then
    $iTo = StringLen($sString)
    ElseIf $iTo < $iFrom +3 Then
    $iTo = $iFrom +3
    EndIf
    If Not IsNumber($sQuot) Then $sQuot = Asc($sQuot)
    If $sQuot <> 34 Then
    If $sQuot <> 39 Then Return SetError(1,0,0)
    EndIf
    If Not IsNumber($sBrack) Then $sBrack = Asc($sBrack)
    Local $open, $close, $sBefore = '', $sAfter = ''
    Switch $sBrack
    Case 40
    $open = 40
    $close = 41
    Case 91
    $open = 91
    $close = 93
    Case 123
    $open = 123
    $close = 125
    Case Else
    Return SetError(2,0,0)
    EndSwitch
    If $iFrom > 1 Then
    $sBefore = StringLeft($sString, $iFrom-1)
    $sString = StringTrimLeft($sString, $iFrom-1)
    EndIf
    If $iTo < StringLen($sString) Then
    $sAfter = StringRight($sString, StringLen($sString) -$iTo)
    $sString = StringTrimRight($sString, StringLen($sString) -$iTo)
    EndIf
    Do
    $sString = StringReplace(StringReplace($sString, Chr($sQuot), Chr($open), 1), Chr($sQuot), Chr($close), 1)
    Until @extended = 0
    Return $sBefore & $sString & $sAfter
    EndFunc ;==>_ReplQuoteWithBrackets

    [/autoit]