wahrlos Zeichen aus String lesen

  • Hallo,

    ich möchte aus einem String wahrlos Anzahl x(10) Zeichen auslesen, ohne eine Reihenfolge zu bekommen.
    Ist das möglich ?

    Anbei mal meine Func :

    Spoiler anzeigen
    [autoit]


    Func Passwort()

    Local $StringLeicht = "1234567890abcdefghijklmnopqrstuvwxyz"
    Local $StringMittel = "1234567890abcdefghijklmnopqrSTUVWXYZ"
    Local $StringHoch = "1234567890abcdefghijklmnOPQRSTUVWXYZ#?&%$§!{[]})"
    Local $StringSehrHoch = "1234567890abcdefghijklmNOPQRSTUVWXYZ#?&%$§!{[]})çãáÿÍõÇÔÊÂâÕ<>|)"


    $2 = GUICtrlRead($Combo)
    $Anzahl = GUICtrlRead($Edit2)
    $Anzahl1 = $Anzahl / 5


    ;MsgBox(0, "Die Zahl ist ", $Anzahl1 & "," & $1 , 5)
    ; MsgBox(0, "Die Zahl ist ", $1, 5)
    ; MsgBox(0,"Die Gesamtsumme ist", $sum)

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

    ; Hier müsste die Abfrage rein und die bearbeitung.
    ; Erst soll abgefragt werden was in der Combo steht, und endsprechend der String gewählt werden
    ; Dann soll Edit1 Abgefragt werden was für eine eingabe da ist (Zahl) welche als Multiplikator fungieren soll
    ; Wenn Combo = Sehr Hoch ist, und Edit1 = 12 ist, soll der String $StringSehrHoch gewählt werden, und daraus willkürlich
    ; 12 Zeichen..... von allen etwas in beliebiger Reihenfolge
    ; Als Beispiel sollte dann rauskommen, so stell ich mir das vor : > $aÿRs4[8?<#|
    ;Global $StringSehrHoch = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ#?&%$§!{[]})çãáÿÍõÇÔÊÂâÕ<>|)
    Switch $2


    Case "Leicht"
    if $2 = $InCom1 Then
    MsgBox(0, "Die Zahl ist ", $Anzahl & "," & $1 , 5)
    EndIf
    Case "Mittel"
    if $2 = $InCom2 Then
    MsgBox(0, "Die Zahl ist ", $Anzahl & "," & $1 , 5)
    EndIf
    Case "Hoch"
    if $2 = $InCom3 Then
    MsgBox(0, "Die Zahl ist ", $Anzahl & "," & $1 , 5)
    EndIf
    case "Sehr Hoch"
    if $2 = $InCom4 then
    MsgBox(0, "Die Zahl ist ", $Anzahl & "," & $1 , 5)
    ;MsgBox(0, "Der Text lautet ", $1 , 5)

    ;$Code = Random($Anzahl,StringLen($StringSehrHoch),1); +
    $Code = StringMid($StringSehrHoch, 1, $Anzahl + 1)
    ;$Code = StringRight($StringSehrHoch, $Anzahl)
    ;$Test = StringLeft($StringSehrHoch, $Anzahl1)
    ;$Test1 = StringRight($StringSehrHoch, $Anzahl1)
    ;$Test2 = StringMid($StringSehrHoch, $Anzahl, $Anzahl1)
    ;$Code = Random($Anzahl,StringRight($StringSehrHoch))
    ;$s =StringFormat ( "var1=%s var2=%.2f, var3=%d" ,$string, $float, $int )
    ;$Code = $Test + $Test1 + $Test2 + $Test3
    ;$Code = String($Test and $Test1 and $Text2 and $Text3 )

    GUISetFont (9, 800, 4)
    GUICtrlCreateLabel($Code , 100 , 180) ; Code sollte hier ausgegeben werden, aber so das er kopiert werden kann und in eine ini geschrieben werden mit Datum
    GUICtrlSetColor(-1,0xff0000)
    EndIf

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

    EndSwitch

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

    EndFunc

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

    Danke für die Hilfe

    • Offizieller Beitrag

    Mir war grad langweilig und so habe ich das Script mal erstellt:

    Spoiler anzeigen
    [autoit]


    #include <String.au3>
    #include <array.au3>
    #include <File.au3>
    #include <GUIConstants.au3>

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

    Global $key[4]
    $key[0] = "1234567890abcdefghijklmnopqrstuvwxyz"
    $key[1] = "1234567890abcdefghijklmnopqrSTUVWXYZ"
    $key[2] = "1234567890abcdefghijklmnOPQRSTUVWXYZ#?&%$§!{[]})"
    $key[3] = "1234567890abcdefghijklmNOPQRSTUVWXYZ#?&%$§!{[]})çãáÿÍõÇÔÊÂâÕ<>|)"

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

    GUICreate("Passwort-Generator", 420, 120, -1, -1)
    $Combo = GUICtrlCreateCombo ("", 10, 10, 120, 20, $CBS_DROPDOWNLIST)
    GUICtrlSetData(-1,"1 = Leicht|2 = Mittel|3 = Hoch|4 = Sehr Hoch","1 = Leicht")
    $Edit2 = GUICtrlCreateInput("12", 10, 40, 80, 20)
    $Button = GUICtrlCreateButton("Start", 120, 40, 60, 20, $BS_DEFPUSHBUTTON)
    GUICtrlSetState($Edit2, $GUI_FOCUS)
    $Code = GUICtrlCreateInput("", 10, 70, 400, 20, $ES_READONLY)
    GUISetState ()

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

    While 1
    $msg = GUIGetMsg()
    If $msg = $Button Then Passwort()
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    Wend

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

    Func Passwort()
    Local $auswahl = Number(StringLeft(GUICtrlRead($Combo), 1))
    Local $anzahl = Number(GUICtrlRead($Edit2))
    Local $pass = ""
    For $i = 1 To $anzahl
    $pass &= StringMid($key[$auswahl-1], Random(1, StringLen($key[$auswahl-1]), 1), 1)
    Next
    GUICtrlSetData($Code, $pass)
    EndFunc

    [/autoit]

    Combo zur Auswahl, Eingabefeld für die Anzahl der Zeichen und auf 'Start' klicken. Jeder weitere Klick auf 'Start' generiert ein neues Passwort.

  • Hallo Oscar.

    Wenn Du mal wieder nicht mit der Zeit anzufangen etwas weißt, hier wird es heiß. :rock: Reim :rock:

    Wie wäre es denn, wenn man nicht nur eine Zeichenfolge von z. B.36 Stellen erstellt, sondern das gleichzeitig ein 6 stelligen Ausschnitt davon zusätzlich angezeigt bekommt.

    So könnte man z. B. einen 36 stelligen Code in ein Game einbauen und nach jedem Level bekommt man 6 stelliger angezeigt, so das man z. B. nicht wieder von Level 1 starten muß, wenn man zum Beispiel bereits 5 Level geschafft hat.

    Ist hat nur eine Idee für Deine Zeit. :rofl:


    LG, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    • Offizieller Beitrag

    Hmmm...wie stellst Du Dir das denn vor?
    Es ist ja nicht das Problem einen 36stelligen Code in mehrere Teile aufzusplitten. Dazu sind ja nur ein paar kleine Änderungen nötig.
    Ich meine eher im Spiel. Bei Level 5 muß man dann einen 30stelligen und bei Level 6 einen 36stelligen Code eingeben?
    Ist das nicht ein wenig unpraktisch? Ich glaub, ich würde lieber eine Load/Save-Funktion anbieten. ;)

  • Oscar, das war doch nur ein Beispiel.

    Eigentlich geht es um den Vergleich Teilstring : Komplettstring, also sozusagen 6 aus 36 oder der GLeichen.

    LG, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hallo Oscar,

    das war genau das was ich wollte. Tausend Dank an dich.
    Aber da sieht man wieder was ein Profi ist. Mein Script hatte 140 Zeilen und lief soweit, bis halt
    auf das ergebnis. Deins hat nur 35 Zeilen.
    Ich lese mich mal ein, um den unterschied zu verstehen und hoffe ich bekomme das hin.

    Also nochmals Danke

    Grüsse