Zahlenfolge senden, ohne die Zahl komplett neu auszugeben. Möglich?

  • Hallo!

    Ich verzweifel an dieser Script Idee.
    Die Aufgabe des Scripts soll es sein, einen Mouseclick in eine Textdatei zu machen, dann eine durch den Benutzer festgelegte Zahl zu Senden. Dann soll es in "$Festgelegte Zahl + Random(1,5,1)" Schritten neue Zahlen in die Textdatei schreiben. Immer mit dem Mouseclick vorher in der Textdatei.
    Das was mich zur Verzweifelung bringt ist allerdings, dass das Script die Zahlen nie komplett entfernen soll (Also nicht Send("{BS 10}"), sondern nur die notwendigen Zahlen. Bsp.: $Festgelegte Zahl = 30000.
    "30000 -> BS 1 -> 30004 -> BS 1 -> 30008 -> BS 2 (Weil zwei Zahlen geändert werden müssen) -> 30010"

    Spoiler anzeigen
    [autoit]

    ;Das Script sollte die Nummern von 10 bis 100000 unterstützen.

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

    Global $Zahl = 30000
    Global $FirstRun = 0
    Global $Randomsum = 0

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

    while 1
    $Zahl = $Zahl + $Randomsum
    If $FirstRun = 0 Then
    MouseClick("Left",1042, 463,1,10)
    Call("FirstRun")
    ElseIf $Zahl < 10 Then
    MouseClick("Left",1042, 463,1,10)
    Send("{BS}")
    Call("SetZahl")
    ElseIf $Zahl < 100 Then
    MouseClick("Left",1042, 463,1,10)
    Send("{BS}")
    Call("SetZahl")
    ElseIf $Zahl < 1000 Then
    MouseClick("Left",1042, 463,1,10)
    Send("{BS}")
    Call("SetZahl")
    ElseIf $Zahl < 10000 Then
    MouseClick("Left",1042, 463,1,10)
    Send("{BS}")
    Call("SetZahl")
    ElseIf $Zahl < 100000 Then
    MouseClick("Left",1042, 463,1,10)
    Send("{BS}")
    Call("SetZahl")
    EndIf
    WEnd

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

    Func SetZahl()
    $Randomsum = $Randomsum + Random(1,5,1)
    Send ($Randomsum)
    Sleep(5000)
    EndFunc

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

    Func FirstRun()
    Send ($Zahl)
    $FirstRun = $FirstRun + 1
    Sleep(5000)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit]
    Spoiler anzeigen

    Ich hoffe jemand kann mir helfen. ?( Ich glaube ich steh einfach nur aufm Schlauch.

    11 Mal editiert, zuletzt von Chrisqq (7. Juli 2012 um 02:13)

  • Nenn mal bitte den konkreten Anwendungsfall.
    Mit Send() im Editor Zahlen hochzählen zu lassen, wieder teilweise zu löschen und die nächste wieder zu schreiben wirkt bisher doch etwas skurril.
    Also sage einfach mal was ganz am Ende herauskommen soll und dann kann man sicherlich eine optimalere Lösung schon im Ansatz finden als mit Send() im Editor rumzuschreiben.

  • Leider kann ich keinen konkreteren Anwendungsfall nennen, ausser Interesse.

    Gestern Abend war ein Bekannter da, mit dem ich auf Autoit gekommen bin. (Er hatte zuvor noch nichts von autoit gehört.) Ich habe ihm ein paar Basics gezeigt, wie zum Beispiel Mouseclick() und Send() und wir schrieben zusammen ein Programm was in den Editor klickt und eine Zahl hochzählt.
    Er fragte mich, ob es nicht möglich wäre, dass man nicht die ganze Zahl wieder löscht sondern, ob man ein Script schreiben kann, was so intelligent ist, dass es die Zahlen erkennt und nur die nötigen Zahlen löscht.

    Jedenfalls lässt mir diese "einfache" Frage keine Ruhe mehr. Vielleicht ist es auch einfach nicht möglich? Und wenn nur unter anderen Bedingungen?

    Das Problem ist das +Random(1,5,1) -Element, denn so muss das Script eigentlich die ausgegeben $Value + Random(1,5,1) immer mit der vorherigen vergleichen und dann entscheiden, wie oft (BS) gesendet werden soll.

    Ich hoffe ich konnte meine Frage etwas weniger skurril wirken lassen. Es geht mir nur um die Idee und ich würde mich sehr freuen meinem Freund das Script mit dem Feature zu zeigen.

    Viele Grüße,
    Chris

    EDIT: Bin mir natürlich bewusst, dass es effektivere und sinvollere (!!) Wege gibt, eine Zahl auszugeben. Allerdings ist die Variante so simpel, dass es mich verrückt macht, dass ich auf keinen Ansatz komme.

  • Na eh du noch ganz verrückt wirst hier mal ein quick and dirty-Ansatz.
    Sicherlich viel zu umständlich aber sollte das machen was ich verstanden habe was du möchtest:

    Spoiler anzeigen
    [autoit]

    Sleep(3000); Damit man noch Zeit hat den Mauscursor in den Editor zu klicken

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

    Global $Zahl = 30000, $d_Offset, $d_C
    Send($Zahl)

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

    Do
    $d_Offset = Random(1, 5, 1)
    $d_C = NumberOfChanges($Zahl, $d_Offset)
    $Zahl += $d_Offset
    Send("{BS " & $d_C & "}" & StringRight($Zahl, $d_C))
    Sleep(100)
    Until $Zahl > 30500

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

    ; Ermittelt wieviele Stellen sich bei der Addierung von 2 Zahlen ändern
    Func NumberOfChanges($d_Zahl, $d_Offset)
    $d_NeueZahl = $Zahl + $d_Offset
    $a_Neu = StringToASCIIArray($d_NeueZahl)
    $a_Alt = StringToASCIIArray($d_Zahl)

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

    For $i = 0 To UBound($a_Alt) - 1
    If $a_Neu[$i] <> $a_Alt[$i] Then
    $d_C = $i
    ExitLoop
    EndIf
    Next
    Return UBound($a_Alt) - $d_C
    EndFunc

    [/autoit]