Wie kann ich eine zufällige 4stellige Zahl erstellen?

  • Wie kann ich eine zufällige 4stellige Zahl erstellen?

    Folgende Bedingungen sind dabei zu beachten:
    1. Die Zahl darf noch nicht in der ini-Datei (siehe unten) enthalten sein.
    2. Die zufällig erstellte Zahl soll dann in die ini-Datei eingetragen werden (damit sie beim nächsten Aufruf des Scripts nicht wieder verwendet wird - Punkt 1).
    3. Die erstellte Zahl soll dann im Script als $Zufallszahl weiter verwendet werden.

    Code
    [IDs]
    1=1234
    2=5000
    3=4002
    4=5089

    Einmal editiert, zuletzt von Root (18. April 2009 um 17:48)

    • Offizieller Beitrag

    Und wo ist dein Lösungsansatz ? Oder sollen wir das Script für dich schreiben ?

  • So ermittels Du eine zufällige 4-stellige Zahl:

    Spoiler anzeigen
    [autoit]


    $var = Random(0000,9999,1)
    sleep(500)
    MsgBox(0,"Wie ist das?", $var)

    [/autoit]

    Was die INI betrifft, so würde ich mir das überlegen, da diese sonst irgendwann 1000 Werte hat. Da kannst Du genauso gleich 1000 Werte in die INI eintragen und dann die Zufallszahl auswerten.

    Ansonsten schau Dir mal die Ini-Befhele ind er Hilfe an und "spiel" damit ein wenig rum. Wichtig für Dich auch noch ein fester Blick auf If/Then und auf Case. Damit solltest Du eine Lsg. finden.

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Es ist schon ok, wenn die Werte in die ini eingetragen werde, so oft
    wird da nichts eingetragen. Das Script dient zum Download von Karten,
    die dann in der Registry registriert werden. Aber immer unter einer
    neuen 4stelligen Zahl, sonst funktioniert die vorher herunter geladene nicht mehr.

    Es würde sich wahrscheinlich anbieten, eine Zufallszahl zu erstellen, und diese dann mit den vorhandenen Werten in der ini zu vergleichen. Aber genau dort hakt es. Den Eintag der neuen Zahl mit iniwrite sollte dann kein Problem sein.

    • Offizieller Beitrag

    Hm, wenn du eine 4 Stellige Zahl brauchst dann mußt du dies machen :

    [autoit]

    $var = Random(1000,9999,1)
    sleep(500)
    MsgBox(0,"Wie ist das?", $var)

    [/autoit]

    Alina dein Script gibt auch 1,2 und 3 stellige Zahlen aus ;)

  • hätte das jetzt so gemacht :

    [autoit]

    $Zufall1=Random(1,9,1)
    $Zufall2=Random(1,9,1)
    $Zufall3=Random(1,9,1)
    $Zufall4=Random(1,9,1)
    $Zufallszahl=$Zufall1&$Zufall2&$Zufall3&$Zufall4
    MsgBox(0,"Test",$Zufallszahl")

    [/autoit]
    • Offizieller Beitrag

    Hier mal eine mögliche Lösung (kommentiert, damit Du auch was lernst):

    Spoiler anzeigen
    [autoit]


    Global $aNumbers = StringSplit(FileRead(@ScriptDir & '\numbers.txt'), @CRLF, 1) ; Array mit bereits vorhandenen Nummern erstellen

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

    Do
    $sRandom = StringFormat('%04s', Random(0, 9999, 1)) ; 4stellige Zufallszahl erzeugen
    Until Not _Double($sRandom) ; Funktion zum überprüfen aufrufen. Falls doppelt (True), Schleife wiederholen

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

    $hFile = FileOpen(@ScriptDir & '\numbers.txt', 1) ; Datei zum schreiben öffnen (Append-Mode)
    If $hFile <> -1 Then ; überprüfen, ob Datei erfolgreich geöffnet werden konnte
    FileWriteLine($hFile, $sRandom) ; Zufallszahl in neue Zeile schreiben
    FileClose($hFile) ; Datei schließen
    EndIf

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

    MsgBox(0, 'Zufallszahl', $sRandom) ; Zahl ausgeben

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

    Func _Double($sNumber)
    For $i = 1 To $aNumbers[0] ; Alle Zahlen im Array durchgehen
    If $sNumber = $aNumbers[$i] Then Return True ; Wenn Zahl im Array vorhanden, dann Funktion verlassen und True zurückgeben
    Next
    Return False ; Zahl war nicht vorhanden, Funktion verlassen und False zurückgeben
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Hallo,

    ich glaube ohne Array geht etwas schneller ;)

    Spoiler anzeigen
    [autoit]

    Global $sNumbers = FileRead(@ScriptDir & '\numbers.txt') ; vorhandenen Nummern lesen

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

    Do
    $sRandom = StringFormat('%04s', Random(0, 9999, 1)) ; 4stellige Zufallszahl erzeugen
    Until Not StringInStr($sNumbers, $sRandom) ; Funktion zum überprüfen aufrufen. Falls doppelt (True), Schleife wiederholen

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

    $hFile = FileOpen(@ScriptDir & '\numbers.txt', 1) ; Datei zum schreiben öffnen (Append-Mode)
    If $hFile <> -1 Then ; überprüfen, ob Datei erfolgreich geöffnet werden konnte
    FileWriteLine($hFile, $sRandom) ; Zufallszahl in neue Zeile schreiben
    FileClose($hFile) ; Datei schließen
    EndIf

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

    MsgBox(0, 'Zufallszahl', $sRandom) ; Zahl ausgeben

    [/autoit]
  • Raupi

    auch die 0001 ist eine vierstellige Zahl. Eine Vorwahl ist auch eine Zahl die mit einer Null beginnt. Er fragte / sagte nicht eine vierstellige Ziffernfolge ohne am Anfang eine Null zu haben. Sonst wäre ich auch bei 1000 angefangen.

    Ein Ziffernblock beinhaltet die Zahlen von 0 bis 9. ;)

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Ich würde es einfach so machst, das du die letzte zahl in der Ini Speicherst und dann +1 machst!

    @Jam:
    Das geht leider bei dem was er möchte nicht. Hatte ich heute mittag schon mit ihm besprochen. Aber die Idee wäre eigentlich die bessere Umsetzung, wenn sie möglich wäre.

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr