Code verkürzen (StringReplace + array??)

  • Hallo zusammen
    Habe mich versucht den Code zu kürzen, aber bekomme nur Fehler gemeldet!
    Eventuell habt ihr noch eine bessere Idee, probiert habe ich folgegendes:

    [autoit]

    $String = '["HKLM , SYSTEM / ControlSet001 | Control >>>> Class - {4D36E972-E325-11CE-BFC1-08002bE10318} ; 0001 >> Ndi > params -->>> FlowControl ," enum]'

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

    Local $aRepl[37][1] = ['Chr(34)', " ", "| ", "| ", "|", "//", "/ ", " /", "/", " -->>", "-->> ", "-->>", " -", "- ", " ->", "-> ", "->", " -->", & _
    "--> ", "-->", ">>", " >>", ">> ", "> ", " >", ">", ',"', ", ", " ,", ",", " ;", "; ", ";", "'", " \", "\ ", "\\"]

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

    For $i = 0 To UBound($aRepl) - 1
    $String = StringReplace($String, $aRepl[$i][0], $aRepl[$i][1])
    Next
    If StringRight($String, 1) = "]" Then $String = StringLeft($String, (StringLen($String) - 1))
    If StringLeft($String, 1) = "[" Then $String = StringRight($String, (StringLen($String) - 1))
    If StringRight($String, 1) = "\" Then $String = StringLeft($String, (StringLen($String) - 1))
    $String = StringReplace($String, "HKCR", "HKEY_CLASSES_ROOT", 1)
    $String = StringReplace($String, "HKLM", "HKEY_LOCAL_MACHINE", 1)
    $String = StringReplace($String, "HKCU", "HKEY_CURRENT_USER", 1)
    $String = StringReplace($String, "HKU", "HKEY_USERS", 1)
    $String = StringReplace($String, "HKCC", "HKEY_CURRENT_CONFIG", 1)
    Return $String

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

    MsgBox(0, "Umgeänderter String ...", $String)

    [/autoit]

    Mein alter Code:

    Spoiler anzeigen
    [autoit]

    $String = '["HKLM , SYSTEM / ControlSet001 | Control >>>> Class - {4D36E972-E325-11CE-BFC1-08002bE10318} ; 0001 >> Ndi > params -->>> FlowControl ," enum]'
    Func CheckString($String)
    $String = StringReplace($String, Chr(34), "")
    $String = StringReplace($String, " ", "\")
    $String = StringReplace($String, "| ", "\")
    $String = StringReplace($String, " |", "\")
    $String = StringReplace($String, "|", "\")
    $String = StringReplace($String, "//", "\")
    $String = StringReplace($String, "/ ", "\")
    $String = StringReplace($String, " /", "\")
    $String = StringReplace($String, "/", "\")
    $String = StringReplace($String, "-->> ", "\")
    $String = StringReplace($String, " -->>", "\")
    $String = StringReplace($String, "-->>", "\")
    $String = StringReplace($String, "-->", "\")
    $String = StringReplace($String, "--> ", "\")
    $String = StringReplace($String, " -->", "\")
    $String = StringReplace($String, " -", "\")
    $String = StringReplace($String, "- ", "\")
    $String = StringReplace($String, "->", "\")
    $String = StringReplace($String, "-> ", "\")
    $String = StringReplace($String, " ->", "\")
    $String = StringReplace($String, ">>", "\")
    $String = StringReplace($String, ">> ", "\")
    $String = StringReplace($String, " >>", "\")
    $String = StringReplace($String, ">", "\")
    $String = StringReplace($String, "> ", "\")
    $String = StringReplace($String, " >", "\")
    $String = StringReplace($String, ", ", "\")
    $String = StringReplace($String, " ,", "\")
    $String = StringReplace($String, ",", "\")
    $String = StringReplace($String, "; ", "\")
    $String = StringReplace($String, " ;", "\")
    $String = StringReplace($String, ";", "\")
    $String = StringReplace($String, ',"', "\")
    $String = StringReplace($String, "'", "\")
    $String = StringReplace($String, " \", "\")
    $String = StringReplace($String, "\ ", "\")
    $String = StringReplace($String, "\\", "\")
    $String = StringReplace($String, " \", "\")
    $String = StringReplace($String, "\ ", "\")
    If StringRight($String, 1) = "]" Then $String = StringLeft($String, (StringLen($String) - 1))
    If StringLeft($String, 1) = "[" Then $String = StringRight($String, (StringLen($String) - 1))
    If StringRight($String, 1) = "\" Then $String = StringLeft($String, (StringLen($String) - 1))
    $String = StringReplace($String, "HKCR", "HKEY_CLASSES_ROOT", 1)
    $String = StringReplace($String, "HKLM", "HKEY_LOCAL_MACHINE", 1)
    $String = StringReplace($String, "HKCU", "HKEY_CURRENT_USER", 1)
    $String = StringReplace($String, "HKU", "HKEY_USERS", 1)
    $String = StringReplace($String, "HKCC", "HKEY_CURRENT_CONFIG", 1)
    Return $String
    EndFunc ;=>CheckString
    MsgBox(0, "Umgeänderter String ...", $String)

    [/autoit]

    Einmal editiert, zuletzt von Fintan (14. Februar 2011 um 13:50)

  • Ohne den Code getestet zu haben: Vermutlich musst du erstens die Anführungszeichen um Chr(37) entfernen, zweitens das Array zweidimensional erstellen.
    Momentan ist es eindimensional. Deshalb gibt es auch Fehler, wenn du versuchst auf $aRepl[1][$i] zuzugreifen.
    Also dann auch das Array mit Local $aRepl[2] definieren.

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Hi,

    Zitat


    Local $aRepl[37][1] = ['Chr(34)', " ", "| ", "| ", "|"...
    ;...
    For $i = 0 To UBound($aRepl) - 1
    $String = StringReplace($String, $aRepl[$i][0], $aRepl[$i][1])
    Next


    So ist's kürzer ...

    [autoit]


    Global $String = '["HKLM , SYSTEM / ControlSet001 | Control >>>> Class - {4D36E972-E325-11CE-BFC1-08002bE10318} ; 0001 >> Ndi > params -->>> FlowControl ," enum]'
    Func CheckString($String)
    $String = StringRegExpReplace ($String, "(\h+.*?\h+)", '\\')
    $String = StringRegExpReplace ($String, '([\[\]"])', '')
    $String = StringReplace($String, "HKCR", "HKEY_CLASSES_ROOT", 1)
    $String = StringReplace($String, "HKLM", "HKEY_LOCAL_MACHINE", 1)
    $String = StringReplace($String, "HKCU", "HKEY_CURRENT_USER", 1)
    $String = StringReplace($String, "HKU", "HKEY_USERS", 1)
    $String = StringReplace($String, "HKCC", "HKEY_CURRENT_CONFIG", 1)
    Return $String
    EndFunc ;=>CheckString
    ;~ MsgBox(0, "String ...", $String)
    ;~ MsgBox(0, "Umgeänderter String ...", CheckString($String))
    ConsoleWrite (StringFormat ("%s\n", CheckString($String)))

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

    Exit (0)

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

    ;------

    [/autoit]


    Gruß
    Greenhorn


  • Ah ja, danke dir Greenhorn, das klappt toll.

    Der vollständigkeithalber das gesamte Script mit dem man direkt in einen Registry-Schlüssel springen kann. Das Script ist nicht von mir, habe es irgendwo im Netz gefunden, k.A. mehr wo.
    Vielleicht erkennt ja sogar jemand sein Script.

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    Dim $Regit, $LastKey, $Fehler
    $Regit = @WindowsDir & "\regedit.exe"
    $LastKey = RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit", "LastKey")
    If @error = -1 Then
    RegWrite("HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit", "LastKey", "REG_SZ", "ARBEITSPLATZ\")
    $LastKey = RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit", "LastKey")
    EndIf
    $LastKey = InputBox("RegJumper", "Geben Sie hier den Schlüsselnamen an, den Sie direkt anwählen wollen." & @CRLF & @CRLF & "(evtl. mit Copy && Paste einfügen)", $LastKey, "", 550, 150)
    $Fehler = @error
    Select
    Case $Fehler = 0 And $LastKey = ""
    Exit
    Case $Fehler = 0
    $LastKey = CheckKey($LastKey)
    Case $Fehler = 1
    Exit
    EndSelect
    RegWrite("HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit", "LastKey", "REG_SZ", $LastKey)
    Sleep(200)
    Run($Regit)
    Exit
    Func CheckKey($val)
    $val = StringRegExpReplace ($val, "(\h+.*?\h+)", '\\')
    $val = StringRegExpReplace ($val, '([\[\]"])', '')
    $val = StringReplace($val, "HKCR", "HKEY_CLASSES_ROOT", 1)
    $val = StringReplace($val, "HKLM", "HKEY_LOCAL_MACHINE", 1)
    $val = StringReplace($val, "HKCU", "HKEY_CURRENT_USER", 1)
    $val = StringReplace($val, "HKU", "HKEY_USERS", 1)
    $val = StringReplace($val, "HKCC", "HKEY_CURRENT_CONFIG", 1)
    Return $val
    EndFunc ;=>CheckKey

    [/autoit]

    6 Mal editiert, zuletzt von Fintan (14. Februar 2011 um 13:59)