Zufallszahl nur einmal geben

  • Ich möchte, das nur EINE generierte "IP" in das Texteditorfeld geschrieben wird.
    erst bei einer neuen Instanz des Texteditors soll die nächste neu generierte Nummer eingeschrieben werden usw.
    Bis jetzt habe ich eine Endlosschleife in dem der Satz immerund immerwieder mit einer neuen nr. in ein Fenster geschrieben wird.
    Ich hoffe, ihr könnt mir helfen.
    Grüße

    [autoit]

    AutoItSetOption("WinTitleMatchMode", 4)
    while 1
    $zeichen = "1234567890"
    $string = StringSplit ($zeichen,"")
    $anzahl_der_zeichen = 2
    $zeichen1= "1"
    For $i = 1 To $anzahl_der_zeichen
    $zeichen1 &= $string[Random(1,UBound ($string)-1)]
    Next
    $string = StringSplit ($zeichen,"")
    $anzahl_der_zeichen = 3
    $zeichen2 = ""
    For $i = 1 To $anzahl_der_zeichen
    $zeichen2 &= $string[Random(1,UBound ($string)-1)]
    Next
    $string = StringSplit ($zeichen,"")
    $anzahl_der_zeichen = 2
    $zeichen3 = ""
    For $i = 1 To $anzahl_der_zeichen
    $zeichen3 &= $string[Random(1,UBound ($string)-1)]
    Next
    $string = StringSplit ($zeichen,"")
    $anzahl_der_zeichen = 3
    $zeichen4 = ""
    For $i = 1 To $anzahl_der_zeichen
    $zeichen4 &= $string[Random(1,UBound ($string)-1)]
    Next
    $ip= $zeichen1&"."&$zeichen2&"."&$zeichen3&"."&$zeichen4

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

    WinWaitActive("[CLASS:Edit; INSTANCE:1]")
    If @error Then
    WinWaitActive("[CLASS:Edit; INSTANCE:1]")
    Else
    if winactive ("[CLASS:Edit; INSTANCE:1]","") then
    Send("Deine IP "&@IPAddress1&" und eine zufallsgenerierte: "&$ip&": ",1)
    EndIf
    WEnd

    [/autoit]
  • Du brauchst ein Array in dem du alle IP's speicherst.

    einfach so:

    [autoit]


    Dim $aIP[1]
    _ArrayAdd($aIP, $ip)

    [/autoit]

    Und dann musst du vor dem Senden von dem ganzen Text überprüfen ob die IP schon einmal vorkam
    so z.B.

    [autoit]


    _ArraySearch($aIP, $ip)
    if @error Then
    send(...)
    Else
    ;ip kam schon vor
    EndIf

    [/autoit]
  • Danke dir, hat mir schonmal soweit super geholfen. hab es jetzt so. nur das ich halt erteinmal den Editor öffnen und schließen muss eh er reagiert da es ja bei Winwaitclose erst anfängt. anders hab ich es net hinbekommen, da ja sonst wieder alle auf einmal geströmt gekommen wären. aber denke mal ist wieder nur nen denkfehler von mir.

    Spoiler anzeigen
    [autoit]

    #Include <Array.au3>
    AutoItSetOption("WinTitleMatchMode", 4)
    Local $aIP
    while 1

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

    $zeichen = "1234567890"
    $string = StringSplit ($zeichen,"")
    $anzahl_der_zeichen = 2
    $zeichen1= "1"
    For $i = 1 To $anzahl_der_zeichen
    $zeichen1 &= $string[Random(1,UBound ($string)-1)]
    Next
    $string = StringSplit ($zeichen,"")
    $anzahl_der_zeichen = 3
    $zeichen2 = ""
    For $i = 1 To $anzahl_der_zeichen
    $zeichen2 &= $string[Random(1,UBound ($string)-1)]
    Next
    $string = StringSplit ($zeichen,"")
    $anzahl_der_zeichen = 2
    $zeichen3 = ""
    For $i = 1 To $anzahl_der_zeichen
    $zeichen3 &= $string[Random(1,UBound ($string)-1)]
    Next
    $string = StringSplit ($zeichen,"")
    $anzahl_der_zeichen = 3
    $zeichen4 = ""
    For $i = 1 To $anzahl_der_zeichen
    $zeichen4 &= $string[Random(1,UBound ($string)-1)]
    Next
    $ip= $zeichen1&"."&$zeichen2&"."&$zeichen3&"."&$zeichen4

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

    WinWaitActive("Unbenannt - Editor","")
    If @error Then
    WinWaitActive("Unbenannt - Editor","")
    Else
    WinWaitActive("Unbenannt - Editor","")
    if WinWaitClose ("Unbenannt - Editor","") then WinWaitActive("Unbenannt - Editor","")
    if winactive ("Unbenannt - Editor","") then Send($ip)
    EndIf
    Dim $aIP[1]
    _ArrayAdd($aIP, $ip)
    _ArraySearch($aIP, $ip)
    if @error Then
    send("no IP dedected")
    Else
    WinWaitActive("Unbenannt - Editor","")
    EndIf
    WEnd

    [/autoit]
  • Du hast da ein paar Denkfehler und ein paar Dinge die umständlich gelöst sind...
    1. Du musst natürlich erst überprüfen ob die IP schon im Array ist und dann erst (wenn sie nicht vorhanden ist) die neue einfügen.
    2. Du machst ständig das selbe Stringsplit in das selbe Array.
    3. Du solltest ganzzahlige Randomzahlen generieren.
    4. Winwaitactive finde ich sehr fehleranfällig, Send noch mehr ^^
    5. Es gibt keine IP's über 255 :D

    Deswegen hier mal 2 Vorschläge von mir:

    [autoit]


    #include <Array.au3>
    Local $sIpTmp, $aIp[1]
    While 1
    $sIpTmp = "192.168." & Random(0, 255, 1) & "." & Random(0, 255, 1); Beispielsweise mit IP's aus einem privaten Bereich (192.168...)
    _ArraySearch($aIp, $sIpTmp)
    If @error Then
    _ArrayAdd($aIp, $sIpTmp)
    ConsoleWrite($sIpTmp & @CRLF)
    Else
    ConsoleWrite($sIpTmp & " existiert schon" & @CRLF)
    EndIf
    WEnd

    [/autoit]

    Notepad Version:

    [autoit]


    #include <Array.au3>

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

    HotKeySet("{Esc}", "quit")
    Local $sIpTmp, $aIp[1]
    ShellExecute("notepad.exe")
    WinWait("Unbenannt - Editor")

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

    While WinExists("Unbenannt - Editor")
    $sIpTmp = "10." & Random(0, 255, 1) & "." & Random(0, 255, 1) & "." & Random(0, 255, 1); Beispielsweise mit IP's aus einem anderen privaten Bereich (10...)
    _ArraySearch($aIp, $sIpTmp)
    If @error Then
    _ArrayAdd($aIp, $sIpTmp)
    ControlSend("Unbenannt - Editor", "", "[CLASS:Edit; INSTANCE:1]", $sIpTmp & @CRLF)
    Else
    ControlSend("Unbenannt - Editor", "", "[CLASS:Edit; INSTANCE:1]", "Die generierte IP: " & $sIpTmp & " existiert schon." & @CRLF)
    EndIf
    WEnd

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

    Func quit()
    Exit
    EndFunc

    [/autoit]
  • vielen dank für deine Hilfe, naja na das mit der gleichen ip wäre in dem sinne egal gewesen, da ich eig. wollte:
    bsp Notepad

    wartet bis das notpad bereit ist- schreibt eine generierte ip- wartet bis ein neues notpadfenster da ist-schreibt eine generierte ip.

    Das mit den ganzahligen Random-zahlen war ne super idee, wusste halt bis ebend noch nicht, wie ich das anstellen sollte, wenn Ehrlich bin, deswegen so gestückelt hatte.
    keine IP über 255? *öhhhm. lach* stimmt! :pinch: :D