Hochzählen

  • Hallo ich habe ne unendlich Schleife gebastelt (while 1 xD)
    Bei jedem durchlauf soll also $a um 1 erhöht werden.

    Daher dachte ich

    $a = $a+1

    da schmiert er mir aber immer ab :thumbdown:

    Wenn a größer als 20 ist soll auch was passieren (If then schon klar aber wie sehe ich nach ob a größer als 20 ist mit If $a>20 ?)

    Vielen Dank!

    Einmal editiert, zuletzt von Ditb (7. Februar 2010 um 19:39)

  • ch habe ne unendlich Schleife gebastelt (while 1 xD)
    Bei jedem durchlauf soll also $a um 1 erhöht werden.

    Daher dachte ich

    $a = $a+1

    da schmiert er mir aber immer ab

    Wenn a größer als 20 ist soll auch was passieren (If then schon klar aber wie sehe ich nach ob a größer als 20 ist mit If $a>20

    [autoit]


    $var = 0
    While 1
    $var = $var +1
    If $var>20 Then
    msgbox(1,"","test")
    EndIf
    WEnd

    [/autoit]


    Hoffe du meinst das ^^

  • Hallo Ditb,

    Lösungsmöglichkeiten hast du zwar schon, aber der Fehler scheint ja wo anders zu liegen. Poste doch einfach einmal dein komplettes Skript,

    mfg (Auto)Bert

  • Ich werf ein dickes

    DANKESCHÖN

    in die Runde. Habt mir alle geholfen merci ;)

    Mein Fehler wars das ich der $a keinen Wert zugewiesen habe :thumbup:

  • Statt einen Wert zuzuweisen tuts auch Folgendes :

    [autoit]


    Local $var

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

    ; oder auch

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

    Global $var

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

    Aber er hat doch $a = $a + 1 geschrieben.
    In dem moment, wo $a = $a ausgeführt wird, kann AutoIt $a keinen Wert zuweisen.
    $a = 1
    $a = $a + 1 wäre die Lösung, da AutoIt bei $a = $a den Wert von $a kennt :D :D
    MfG. PrideRage

    Meine Projekte:
    ClipBoard Manager (beendet)
    Gutes ClipBoard Verwaltungs Programm mit nützlichen Funktionen.

    HTML Creator (beendet)
    Nützliches Tool um schnell ein eigenes HTML Dokument zu erstellen.

  • Ich denke es hat damit zu tun, dass AutiIt automatisch "für Dich" die Variablen deklariert, wenn
    Du es nicht explizit selber machst.

    Opt("MustDeclareVars", 0)
    Wenn diese Option genutzt wird müssen alle Variablen deklariert werden mit Dim, Local oder Global bevor sie verwendet werden können - beseitigt die Möglichkeit von Bugs durch Schreibfehler in Variablen.
    1 = Variable muss deklariert werden
    0 = Variable muss nicht deklariert werden (Standard)

    Deshalb ist "$a = 1" so ähnlich wie "Local/Global $a = 1"

    auf alle Fälle muss das Eine oder Andere im Script erscheinen, sonst kann die Addition nicht
    ausgeführt werden, habe nur für mich laut gedacht/geschrieben :whistling:

  • ich glaube, das UR-PROBLEM ist, dass du in der MSGBox ein " " nicht ausgefüllt hast, dadurch wird die Box nicht erzeugt. Und du hast nen dauerläufer... Overflow...

    ... wasweisichdennschon...

  • ich glaube, das UR-PROBLEM ist, dass du in der MSGBox ein " " nicht ausgefüllt hast, dadurch wird die Box nicht erzeugt. Und du hast nen dauerläufer... Overflow...

    Es tut ja schon fast weh nochmal hier zu posten, aber man kommt ja nicht drumrum.

    Chrischn: Nein. Du kannst auch

    [autoit]

    MsgBox("","","","","")

    [/autoit]

    schreiben. Die MsgBox wird trotzdem erzeugt. Das Urproblem war, dass $a nicht deklariert war.

    @Rest: Es ist vollkommen wurst ob man jetzt $a = 0 oder Global $a = 0 oder Global $a schreibt.
    Entscheidet man sich für die erste oder zweite Variante, ist $a eine Globale Variable mit dem Wert 0. Wählt man allerdings die letzte Variante ( in der $a keinen Wert enthält ), ist $a leer.

    Diese Variable ist jetzt automatisch ein String (korrigiert mich wenn ich falsch liege), da ihr Wert "LEER" und nicht "0" ist. Wird nun mit der leeren Variable gerechnet, wandelt AutoIt den String in eine Zahl um. Da Strings immer 0 sind ergibt sich auch bei

    [autoit]

    Global $a
    $a += 1
    MsgBox(0,"",$a)

    [/autoit]


    das richtige Ergebnis.

    [autoit]

    $a += 1 ; ist eine kurzvorm für
    $a = $a + 1

    [/autoit][autoit]

    $a = $a + 1 ; Ist in wirklichkeit:
    $a = "" + 1 ; und das ist in wirklichkeit:
    $a = 0 + 1

    [/autoit]
  • Muss mich auch mal dranhängen!

    Habe ein ähnliches Problem! Das mit += habe ich verstanden aber wie kann ich den Wert vorgeben ab wann er anfangen soll hochzuzählen?

    Möchte also bei 1000 beginnen und mit +1 weiterzählen innerhalb einer bereits vorhandenen Schleife mit FOR!?

    [autoit]


    Global $Artikel
    $Artikel+=1

    [/autoit]
  • Zitat

    ;mach was

    Genau das kann ich nich, weil ich nur Zählen will und den "hochgezählten" Wert in einer For-Schleife weiterverwende!

    Habe es jetzt so gelöst:

    [autoit]

    For $i=1 to 2
    Global $Grp2
    $Grp=1000
    $Grp2+=1
    $Grp3=$Grp+$Grp2
    Send("{Ins}{Enter}")
    Send(""&$Grp3&"{Tab}AUTO-IT Gruppe "&$Grp3&"{Tab}3200{Tab}8200{Tab 5}")
    Next

    [/autoit]

    Geht das auch einfacher?

  • Also ich weiss nicht ob ich das jetzt richtig verstanden habe aber auf jeden fall ist in deinem script die variable $grp2 zwar deklariert hat aber keinen wert zugewiesen bekommen
    ;)


    Ich hab dein problem zwar nicht ganz verstanden aber wenn du den wert irgendwie weiterverwenden willt dann machs doch einfach so:


    For $i=1000 to 1002
    ; anstatt deiner variablen $grp kannst du jetzt einfach immer im script $i benutzen. $i ist wie dein $grp 1000 und wird nach jedem durchlauf automatisch um eins erhoeht
    next


    hoffe ich konnte dir helfen

  • [autoit]

    anstatt deiner variablen $grp kannst du jetzt einfach immer im script $i benutzen.

    [/autoit]

    Das geht natürlich auch am einfachsten! Hatte ich wohl einen Knoten im Kopf!? :rolleyes:

    Danke erstmal für deine Hilfe!