Warum wird & in [] dargestelle?

  • [autoit]


    $hGUI = GUICreate("", 120, 60)
    $hInput = GUICtrlCreateInput("", 10, 10, 100, 20)
    $hButton = GUICtrlCreateButton("OK", 10, 35, 100, 20)
    GUISetState()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    Case $hButton
    GUICtrlSetData($hInput, _Crypt(GUICtrlRead($hInput)))
    EndSwitch
    WEnd

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

    Func _Crypt($sString)
    ; Ja ich weiß, mit einem 2D-Array und einer For-Next Schleife wäre es 200 mal kürzer. Aber ich wollte es nicht unnötig kompliziert machen.
    $sString = _StringReplace($sString,"a","123")
    $sString = _StringReplace($sString, "b", "y")
    $sString = _StringReplace($sString, "c", "x")
    $sString = _StringReplace($sString, "d", "w")
    $sString = _StringReplace($sString, "e", "v")
    $sString = _StringReplace($sString, "f", "u")
    $sString = _StringReplace($sString, "g", "t")
    $sString = _StringReplace($sString, "h", "s")
    $sString = _StringReplace($sString, "i", "r")
    $sString = _StringReplace($sString, "j", "q")
    $sString = _StringReplace($sString, "k", "p")
    $sString = _StringReplace($sString, "l", "o")
    $sString = _StringReplace($sString, "m", "n")
    $sString = _StringReplace($sString, "n", "m")
    $sString = _StringReplace($sString, "o", "l")
    $sString = _StringReplace($sString, "p", "k")
    $sString = _StringReplace($sString, "q", "j")
    $sString = _StringReplace($sString, "r", "i")
    $sString = _StringReplace($sString, "s", "h")
    $sString = _StringReplace($sString, "t", "g")
    $sString = _StringReplace($sString, "u", "f")
    $sString = _StringReplace($sString, "v", "e")
    $sString = _StringReplace($sString, "w", "d")
    $sString = _StringReplace($sString, "x", "c")
    $sString = _StringReplace($sString, "y", "b")
    $sString = _StringReplace($sString, "z", "a")
    $sString = _StringReplace($sString, "&", "&")

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

    Return _CleanUp($sString)
    EndFunc ;==>_Crypt

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

    Func _StringReplace($sString, $sSearch, $sReplace)
    Return StringRegExpReplace($sString, "(?<!\[)" & $sSearch & "(?!\])", "[" & $sReplace & "]")
    EndFunc ;==>_StringReplace

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

    Func _CleanUp($sString)
    Return StringRegExpReplace($sString, "\[(\w+?)\]", "\1")
    EndFunc ;==>_CleanUp

    [/autoit]


    Warum wird & in etwa so dargestellt:

    [&], wie behebe ich das?

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

    Einmal editiert, zuletzt von EliteMattthias (1. April 2010 um 23:36)

  • Er soll aber auch & darstelllen!!!!

    Also, er soll:

    [autoit]


    $sString = _StringReplace($sString,"a","&$123&")

    [/autoit]

    Das soll er so machen auch machen, und da machst du immer [&&]

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Dann machs so, ist eh einfacher:

    Spoiler anzeigen
    [autoit]

    $hGUI = GUICreate("", 120, 60)
    $hInput = GUICtrlCreateInput("", 10, 10, 100, 20)
    $hButton = GUICtrlCreateButton("OK", 10, 35, 100, 20)
    GUISetState()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    Case $hButton
    GUICtrlSetData($hInput, _Crypt(GUICtrlRead($hInput)))
    EndSwitch
    WEnd

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

    Func _Crypt($sString)
    ; Ja ich weiß, mit einem 2D-Array und einer For-Next Schleife wäre es 200 mal kürzer. Aber ich wollte es nicht unnötig kompliziert machen.
    $sString = StringReplace($sString, "a", "123")
    $sString = StringReplace($sString, "b", "y")
    $sString = StringReplace($sString, "c", "x")
    $sString = StringReplace($sString, "d", "w")
    $sString = StringReplace($sString, "e", "v")
    $sString = StringReplace($sString, "f", "u")
    $sString = StringReplace($sString, "g", "t")
    $sString = StringReplace($sString, "h", "s")
    $sString = StringReplace($sString, "i", "r")
    $sString = StringReplace($sString, "j", "q")
    $sString = StringReplace($sString, "k", "p")
    $sString = StringReplace($sString, "l", "o")
    $sString = StringReplace($sString, "m", "n")
    $sString = StringReplace($sString, "n", "m")
    $sString = StringReplace($sString, "o", "l")
    $sString = StringReplace($sString, "p", "k")
    $sString = StringReplace($sString, "q", "j")
    $sString = StringReplace($sString, "r", "i")
    $sString = StringReplace($sString, "s", "h")
    $sString = StringReplace($sString, "t", "g")
    $sString = StringReplace($sString, "u", "f")
    $sString = StringReplace($sString, "v", "e")
    $sString = StringReplace($sString, "w", "d")
    $sString = StringReplace($sString, "x", "c")
    $sString = StringReplace($sString, "y", "b")
    $sString = StringReplace($sString, "z", "a")
    $sString = StringReplace($sString, "&", "&")

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

    Return _CleanUp($sString)
    EndFunc ;==>_Crypt

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

    Func _CleanUp($sString)
    Return StringRegExpReplace($sString, "\[(\w+?)\]", "\1")
    EndFunc ;==>_CleanUp

    [/autoit]


    Ich würde RegExp nur verwenden, wenn man es braucht :)

  • Obwohl das Problem ja eigentlich schon durch das entfernen der Zeile geklärt seien müsste,
    würde ich doch gerne die Ursache nennen:
    Es liegt an der Funktion:

    [autoit]

    Func _CleanUp($sString)
    Return StringRegExpReplace($sString, "\[(\w+?)\]", "\1"); einfach mal das \w durch ein . ersetzen
    EndFunc ;==>_CleanUp

    [/autoit]


    Das \w+ sucht Buchstaben und Zahlen, aber nicht Sonderzeichen wie "&" und deshalb wird [&] nicht zu &!
    PS: "123" wird nicht zu "a" zurückverwandelt!

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • Wobei das etwas seltsam ist ?(
    Zuerst werden die Klammern [] in Zeile 50 hinzugefügt und anschließend wieder entfernt?

    So gehts auch:

    Spoiler anzeigen
    [autoit]


    $hGUI = GUICreate("", 120, 60)
    $hInput = GUICtrlCreateInput("", 10, 10, 100, 20)
    $hButton = GUICtrlCreateButton("OK", 10, 35, 100, 20)
    GUISetState()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    Case $hButton
    GUICtrlSetData($hInput, _Crypt(GUICtrlRead($hInput)))
    EndSwitch
    WEnd

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

    Func _Crypt($sString)
    ; Ja ich weiß, mit einem 2D-Array und einer For-Next Schleife wäre es 200 mal kürzer. Aber ich wollte es nicht unnötig kompliziert machen.
    $sString = _StringReplace($sString,"a","123")
    $sString = _StringReplace($sString, "b", "y")
    $sString = _StringReplace($sString, "c", "x")
    $sString = _StringReplace($sString, "d", "w")
    $sString = _StringReplace($sString, "e", "v")
    $sString = _StringReplace($sString, "f", "u")
    $sString = _StringReplace($sString, "g", "t")
    $sString = _StringReplace($sString, "h", "s")
    $sString = _StringReplace($sString, "i", "r")
    $sString = _StringReplace($sString, "j", "q")
    $sString = _StringReplace($sString, "k", "p")
    $sString = _StringReplace($sString, "l", "o")
    $sString = _StringReplace($sString, "m", "n")
    $sString = _StringReplace($sString, "n", "m")
    $sString = _StringReplace($sString, "o", "l")
    $sString = _StringReplace($sString, "p", "k")
    $sString = _StringReplace($sString, "q", "j")
    $sString = _StringReplace($sString, "r", "i")
    $sString = _StringReplace($sString, "s", "h")
    $sString = _StringReplace($sString, "t", "g")
    $sString = _StringReplace($sString, "u", "f")
    $sString = _StringReplace($sString, "v", "e")
    $sString = _StringReplace($sString, "w", "d")
    $sString = _StringReplace($sString, "x", "c")
    $sString = _StringReplace($sString, "y", "b")
    $sString = _StringReplace($sString, "z", "a")
    $sString = _StringReplace($sString, "&", "&")

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

    Return $sString
    EndFunc ;==>_Crypt

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

    Func _StringReplace($sString, $sSearch, $sReplace)
    Return StringRegExpReplace($sString, "(?<!\[)" & $sSearch & "(?!\])", $sReplace )
    EndFunc ;==>_StringReplace

    [/autoit]
  • Starte das mal und gib by ein. Das Ergebnis sollte yb sein, ist es aber nicht. Die Klammern werden gesetzt damit die Funktion unterscheiden kann ob es sich bei einem Buchstaben noch um das original handelt oder bereits um eine Ersetzung. Ansonsten würde jedes Zeichen mehrmals übersetzt werden. Das gleiche gilt auch für name22 Version.

  • Hey Danke ;)

    Es wirkt beides ;)

    Noch ne Frage, wieder gibts n problem ;)

    [autoit]


    $hGUI = GUICreate("", 120, 60)
    $hInput = GUICtrlCreateInput("", 10, 10, 100, 20)
    $hButton = GUICtrlCreateButton("OK", 10, 35, 100, 20)
    GUISetState()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    Case $hButton
    GUICtrlSetData($hInput, _Crypt(GUICtrlRead($hInput)))
    EndSwitch
    WEnd

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

    Func _Crypt($sString)
    ; Ja ich weiß, mit einem 2D-Array und einer For-Next Schleife wäre es 200 mal kürzer. Aber ich wollte es nicht unnötig kompliziert machen.
    $sString = StringReplace($sString,"a","$50765&")
    $sString = StringReplace($sString,"b","$147447&")
    $sString = StringReplace($sString,"c","$472868&")
    $sString = StringReplace($sString,"d","$311020&")
    $sString = StringReplace($sString,"e","$450806&")
    $sString = StringReplace($sString,"f","$254710&")
    $sString = StringReplace($sString,"g","$279031&")
    $sString = StringReplace($sString,"h","$65555&")
    $sString = StringReplace($sString,"i","$65939&")
    $sString = StringReplace($sString,"j","$459710&")
    $sString = StringReplace($sString,"k","$485879&")
    $sString = StringReplace($sString,"l","$54162&")
    $sString = StringReplace($sString,"m","$404054&")
    $sString = StringReplace($sString,"n","$175431&")
    $sString = StringReplace($sString,"o","$124132&")
    $sString = StringReplace($sString,"p","$482736&")
    $sString = StringReplace($sString,"q","$295972&")
    $sString = StringReplace($sString,"r","$71975&")
    $sString = StringReplace($sString,"s","$128644&")
    $sString = StringReplace($sString,"t","$224984&")
    $sString = StringReplace($sString,"u","$448694&")
    $sString = StringReplace($sString,"v","$267864&")
    $sString = StringReplace($sString,"w","$174224&")
    $sString = StringReplace($sString,"x","$293531&")
    $sString = StringReplace($sString,"y","$55901&")
    $sString = StringReplace($sString,"z","$50028&")
    $sString = StringReplace($sString," ","$176767&")
    $sString = StringReplace($sString,"A","$112235&")
    $sString = StringReplace($sString,"B","$222317&")
    $sString = StringReplace($sString,"C","$467908&")
    $sString = StringReplace($sString,"D","$208577&")
    $sString = StringReplace($sString,"E","$320536&")
    $sString = StringReplace($sString,"F","$314906&")
    $sString = StringReplace($sString,"G","$429374&")
    $sString = StringReplace($sString,"H","$313276&")
    $sString = StringReplace($sString,"I","$417985&")
    $sString = StringReplace($sString,"J","$469185&")
    $sString = StringReplace($sString,"K","$314778&")
    $sString = StringReplace($sString,"L","$89812&")
    $sString = StringReplace($sString,"M","$497053&")
    $sString = StringReplace($sString,"N","$326433&")
    $sString = StringReplace($sString,"O","$15248&")
    $sString = StringReplace($sString,"P","$256020&")
    $sString = StringReplace($sString,"Q","$12367&")
    $sString = StringReplace($sString,"R","$497765&")
    $sString = StringReplace($sString,"S","$6625&")
    $sString = StringReplace($sString,"T","$93807&")
    $sString = StringReplace($sString,"U","$246036&")
    $sString = StringReplace($sString,"V","$47442&")
    $sString = StringReplace($sString,"W","$237122&")
    $sString = StringReplace($sString,"X","$263641&")
    $sString = StringReplace($sString,"Y","$115352&")
    $sString = StringReplace($sString,"Z","$47249&")
    $sString = StringReplace($sString,"0","$4435&")
    $sString = StringReplace($sString,"1","$346552&")
    $sString = StringReplace($sString,"2","$444489&")
    $sString = StringReplace($sString,"3","$182044&")
    $sString = StringReplace($sString,"4","$211491&")
    $sString = StringReplace($sString,"5","$73835&")
    $sString = StringReplace($sString,"6","$222954&")
    $sString = StringReplace($sString,"7","$127472&")
    $sString = StringReplace($sString,"8","$219928&")
    $sString = StringReplace($sString,"9","$221144&")
    $sString = StringReplace($sString,",","$152487&")
    $sString = StringReplace($sString,".","$4967&")
    $sString = StringReplace($sString,"/","$408694&")
    $sString = StringReplace($sString,"\","$291959&")
    $sString = StringReplace($sString,":","$390063&")
    $sString = StringReplace($sString,"-","$426713&")
    $sString = StringReplace($sString,"_","$332383&")
    $sString = StringReplace($sString,"?","$238865&")
    $sString = StringReplace($sString,"!","$344814&")
    $sString = StringReplace($sString,"#","$420542&")
    $sString = StringReplace($sString,"&","$401614&")
    $sString = StringReplace($sString,"=","$37433&")

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

    Return _CleanUp($sString)
    EndFunc ;==>_Crypt

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

    Func _CleanUp($sString)
    Return StringRegExpReplace($sString, "\[(\w+?)\]", "\1")
    EndFunc ;==>_CleanUp

    [/autoit]

    Ich gebe da jetzt 1 ein, und es kommt was gaaaanz komisches

    Warum ?!?

    Da kommt das raus:

    [autoit]


    $$1$21$221144$401614&$221144$401614&28$401614&20$2114$221144$401614&1$401614&$2114$221144$401614&1$401614&$401614&$2114$221144$401614&1$401614&$222$221144$401614&54$401614&$$127472$401614&3$21$221144$401614&$221144$401614&28$401614&35$401614&$$127472$401614&3$21$221144$401614&$221144$401614&28$401614&35$401614&$$2114$221144$401614&1$401614&$2114$221144$401614&1$401614&$2114$221144$401614&1$401614&$2114$221144$401614&1$401614&$21$221144$401614&$221144$401614&28$401614&$221144$401614&$401614&$401614&

    [/autoit]

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • nö es kommte genau das raus was du gescriptet hast:

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

    ; $sString = 1
    $sString = StringReplace($sString,"0","$4435&")
    ; $sString = 1
    $sString = StringReplace($sString,"1","$346552&")
    ; $sString = $346552&; 1 wurde ersetzt
    $sString = StringReplace($sString,"2","$444489&")
    ; $sString = $34655$444489&&; 2 wurde ersetzt
    $sString = StringReplace($sString,"3","$182044&")
    ; $sString = $$182044&4655$444489&&; 3 wurde ersetzt

    [/autoit]

    usw

  • Da wirkt garnix. Das was du da als Ergebnis bekommst kannst du nie wieder zurück übersetzen.

    Du ersetzt die 1 durch $346552&. Im String steht jetzt $346552& und die Funktion weiss nicht das $346552& schon eine Ersetzung ist und ersetzt deshalb jedes Zeichen wieder durch die jeweilige Vorgabe.

    edit: schönes Timing

  • Nehmen wir an du gibst "a" ein..., dann hast du innerhalb der Cryptfunktion den String:
    "$50765&"
    (Da du "a" damit ja ersetzt hast)
    Nun ersetzt deine Funktion weiterhin die (beiden) Zahl(en) "5" mit : "$73835&"
    dann hast du schon den String:
    "$$73835&076$73835&&"
    dann wird er als nächstes die "6", dann die "7" etc. ersetzen.
    Am Ende wird er sogar noch ALLE "&" ersetzen und die kommen bei deiner
    Funktion in jeder Substitution vor!

    Du musst also die Replace Funktionen anders anordnen und vorher den bereits verschlüsselten Teil isolieren!
    \\Edit: Natoll da bin ich wieder der Letzte ^^

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • Spoiler anzeigen
    [autoit]

    Func _Crypt($sString)
    Local $return=""
    Do
    $return &= _internCrypt(StringLeft($sString,1))
    $sString=StringTrimLeft($sString,1)
    Until $sString=""
    Return $return
    EndFunc

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

    Func _internCrypt($sString)
    $sString = StringReplace($sString,"a","123")
    $sString = StringReplace($sString, "b", "y")
    $sString = StringReplace($sString, "c", "x")
    $sString = StringReplace($sString, "d", "w")
    $sString = StringReplace($sString, "e", "v")
    $sString = StringReplace($sString, "f", "u")
    $sString = StringReplace($sString, "g", "t")
    $sString = StringReplace($sString, "h", "s")
    $sString = StringReplace($sString, "i", "r")
    $sString = StringReplace($sString, "j", "q")
    $sString = StringReplace($sString, "k", "p")
    $sString = StringReplace($sString, "l", "o")
    $sString = StringReplace($sString, "m", "n")
    $sString = StringReplace($sString, "n", "m")
    $sString = StringReplace($sString, "o", "l")
    $sString = StringReplace($sString, "p", "k")
    $sString = StringReplace($sString, "q", "j")
    $sString = StringReplace($sString, "r", "i")
    $sString = StringReplace($sString, "s", "h")
    $sString = StringReplace($sString, "t", "g")
    $sString = StringReplace($sString, "u", "f")
    $sString = StringReplace($sString, "v", "e")
    $sString = StringReplace($sString, "w", "d")
    $sString = StringReplace($sString, "x", "c")
    $sString = StringReplace($sString, "y", "b")
    $sString = StringReplace($sString, "z", "a")
    $sString = StringReplace($sString, "&", "&")
    Return $sString
    EndFunc

    [/autoit]

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

  • L3viathan, das funktioniert so nicht. Die Zeichen werden bei jedem Durchlauf erneut ersetzt und es entsteht ein Ergebnis das man nicht zurückrechnen kann.

    Das Skrit wie es am Anfang war funktioniert perfekt. Man sollte der _cleanup() nur noch beibringen auch um ein & die [] wieder zu entfernen. Da einfach mal eben eine Funktion wegrationalisieren ist ein Schritt zurück.

  • Ah jetzt hab ichs auch geschnallt.
    So dann:

    Spoiler anzeigen
    [autoit]


    $hGUI = GUICreate("", 120, 60)
    $hInput = GUICtrlCreateInput("", 10, 10, 100, 20)
    $hButton = GUICtrlCreateButton("OK", 10, 35, 100, 20)
    GUISetState()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    Case $hButton
    GUICtrlSetData($hInput, _Crypt(GUICtrlRead($hInput)))
    EndSwitch
    WEnd

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

    Func _Crypt($sString)
    ; Ja ich weiß, mit einem 2D-Array und einer For-Next Schleife wäre es 200 mal kürzer. Aber ich wollte es nicht unnötig kompliziert machen.
    $sString = _StringReplace($sString,"a","123")
    $sString = _StringReplace($sString, "b", "y")
    $sString = _StringReplace($sString, "c", "x")
    $sString = _StringReplace($sString, "d", "w")
    $sString = _StringReplace($sString, "e", "v")
    $sString = _StringReplace($sString, "f", "u")
    $sString = _StringReplace($sString, "g", "t")
    $sString = _StringReplace($sString, "h", "s")
    $sString = _StringReplace($sString, "i", "r")
    $sString = _StringReplace($sString, "j", "q")
    $sString = _StringReplace($sString, "k", "p")
    $sString = _StringReplace($sString, "l", "o")
    $sString = _StringReplace($sString, "m", "n")
    $sString = _StringReplace($sString, "n", "m")
    $sString = _StringReplace($sString, "o", "l")
    $sString = _StringReplace($sString, "p", "k")
    $sString = _StringReplace($sString, "q", "j")
    $sString = _StringReplace($sString, "r", "i")
    $sString = _StringReplace($sString, "s", "h")
    $sString = _StringReplace($sString, "t", "g")
    $sString = _StringReplace($sString, "u", "f")
    $sString = _StringReplace($sString, "v", "e")
    $sString = _StringReplace($sString, "w", "d")
    $sString = _StringReplace($sString, "x", "c")
    $sString = _StringReplace($sString, "y", "b")
    $sString = _StringReplace($sString, "z", "a")
    $sString = _StringReplace($sString, "&", "&")

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

    Return _CleanUp($sString)
    EndFunc ;==>_Crypt

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

    Func _StringReplace($sString, $sSearch, $sReplace)
    Return StringRegExpReplace($sString, "(?<!\[)" & $sSearch & "(?!\])", "[" & $sReplace & "]")
    EndFunc ;==>_StringReplace

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

    Func _CleanUp($sString)
    Return StringRegExpReplace($sString, "\[(.+?)\]", "\1")
    EndFunc ;==>_CleanUp

    [/autoit]
  • Jo. Was so'n Punkt alles bewirken kann. :D