2x For Schleifen..Problem

  • Hallo Leute,

    irgendwie habe ich ein problem und komme nicht weiter :(
    unzwar habe ich in meinem script eine for schleifen und in der vorschleife ist noch eine forschleife ---siehe Script

    [autoit]


    ;PRODUKTBAUSTEINE !!!
    #include <Array.au3>
    Local $Bausteine[10]
    $Bausteine[0] = "a"
    $Bausteine[1] = "b"
    $Bausteine[2] = "c"
    $Bausteine[3] = "d"
    $Bausteine[4] = "e"
    $Bausteine[5] = "f"
    $Bausteine[6] = "g"
    $Bausteine[7] = "h"
    $Bausteine[8] = "i"
    $Bausteine[9] = "j"
    $i= 0

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

    For $i = 0 To UBound($Bausteine) - 1

    For $d = 1 To 10
    $String = "{Down " & $d & "}"
    WinWaitActive($Produktbaustein)
    ControlSend($Produktbaustein,"","TTreeView1","{LEFT 8}")
    ControlSend($Produktbaustein,"","TTreeView1","{right 5}")


    ControlSend($Produktbaustein,"","TTreeView1",$String)
    $begin = TimerInit();Zeitstart
    ControlSend($Produktbaustein,"","TTreeView1","{enter}")
    _Informationsfenster($Informationsfensterquartal)
    $ende = TimerDiff($begin);Zeitstop
    FileWriteLine($pfad,$Bausteine[$i]& " benötigt für den Start : " &$Newzeit & " Sekunden!")
    MsgBox(0, $Bausteine[$i], $Bausteine[$i] & FileRead($pfad),5)
    WinClose($Bausteine[$i])
    WinActivate($Kundenuebersicht)
    ControlClick($Kundenuebersicht,"","TToolBar1","Left",1,94,10)
    WinWaitActive($Assistent)
    ControlClick($Assistent,"","TBitBtn1")
    WinWaitActive($Produktbaustein)
    Next

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

    Next

    [/autoit]

    Also der geht in die erste schleife rein, und dann in der schleife startet er die 2 schleife. Jedoch läuft der erstmal die 2 schleife 10 mal durch und macht dann bei der ersten schleife wieder weiter... irgendwie werde ich das problem nicht los... es sollte schon so sein das er alle beide schleifen, gleichzeitig 10mal durchlaufen... nicht beide einzeln
    ich hoffe ihr könnt mir weiter helfen

    Danke im Voraus

    3 Mal editiert, zuletzt von Baris (20. Mai 2010 um 14:21)

  • WAS? natürlich geht er in die erste rein und läuft die 2. 10 mal durch. was hast du erwartet? genau so hast dus doch auch gecodet.

  • Hi,

    ich hab genauso geguckt wie tkausl^^

    Was du gecodet hast sieht doch im Detail so aus:

    - Start Schleife 1 mit dem Wert 0
    - Start Schleife 2
    - "Code"
    - Ende Schleife 2
    - Start Schleife 1 mit dem Wert 1
    - Start Schleife 2
    - "Code"
    - Ende Schleife 2

    usw. bis Schleife 1 neun mal durchlief.

    Was hast du denn erwartet? Versuchs doch so genau wie möglich zu Beschreiben, vllt. so wie ich...

    Gruß

    Prajoss

    "Never touch a running System!"

  • ok, aufegepasst :)

    Also

    - Start Schleife 1 mit dem Wert 0 (WERT 0 ist in desem fall A)
    - Start Schleife 2 ( Send wird 1X gesendet)
    - "Code"
    - Ende Schleife 2
    - Start Schleife 1 mit dem Wert 1 ( Eben nicht Wert wird wieder mit 0 gesendet sprich A obwohl jetzt B dran ist)
    - Start Schleife 2 ( Send wird 2x gesendet)
    - "Code"
    - Ende Schleife 2


    Also das problem ist das die erste schleife nicht weiter Tickt, die bleibt beim ersten wert stehen... wenn ich jetzt die schleifen umtausche , funktioniert es genau anders rum...

  • Zitat

    Also das problem ist das die erste schleife nicht weiter Tickt, die bleibt beim ersten wert stehen... wenn ich jetzt die schleifen umtausche , funktioniert es genau anders rum...

    nein.
    die erste läuft EINMAL an, dann die innere 10 mal durch.
    dann läuft die äußere erneut an, und die innere 10 mal durch.
    und so geht das immer weiter, den genau so hast du es programmiert.
    Ich glaub du solltest dir nochmal genau die Logik angucken.

    edit:
    suchst du vll:

    [autoit]

    For $d = 1 To ($i+1)

    [/autoit]

    ?

  • Wollt grad das selbe sagen wie Jonathan, so wie du es beschreibst, brauchst du die 2. For-Schleife doch gar nicht?

    Um die allgemeine Verwirrung zu lösen, wäre es hilfreich zu wissen, was genau du erreichen möchtest
    (d.h. nicht was dein code machen soll, sondern was am ende rauskommen soll --> was genau tust du denn? irgendwas mit Projektbausteinen)

    "Never touch a running System!"

  • ok sorry für die verwirrung, bin selber verwirrt :) bin noch recht am anfang und Lerne noch viel...

    also ich will es so haben das der Script so abläuft

    - Start Schleife 1 mit dem Wert 0
    - Start Schleife 2 ( Down einmal senden)
    - "Code"
    - Ende Schleife 2
    - Start Schleife 1 mit dem Wert 1
    - Start Schleife 2 ( Down zweimal senden)
    - "Code"
    - Ende Schleife 2
    - Start Schleife 1 mit dem Wert 2
    - Start Schleife 2 ( Down dreimal senden)
    - "Code"
    - Ende Schleife 2


    also der soll die Komplette schleife ein mal durch laufen und dann die anderen werte nehmen

    ich hoffe ich konnte es jetzt vernünftig erklären...

    zur übung benutzte ich unser firmen programm wo ich ein automatisierten performance test machen will... und da muss jedes mal ein anderer baustein gestartet werden... Siehe $bausteine.. und pro runde muss die taste {Down} einmal mehr gedrückt werden um den nächsten baustein an zu wählen

  • nö, ich kapiers immernochnicht... vllt. bin Ich auch zu dumm...

    Was soll das ganze denn werden wenns fertig ist, dann können wiridr besser helfen... Und wofür um himmelswillen Brauchst du die ". Schleife?! Ich hoffe irgendwer kann mich mal aufklären ^^

  • Ich meine ich habs kapiert und werd dir gleich die richtigen Codezeilen posten als Edit^^

    muss die noch erstellen :D

    Edit: Das von Ojo müsste passen, nimm das ^^

    "Never touch a running System!"

    2 Mal editiert, zuletzt von Prajoss (20. Mai 2010 um 12:24)

  • nö, ich kapiers immernochnicht... vllt. bin Ich auch zu dumm...

    Was soll das ganze denn werden wenns fertig ist, dann können wiridr besser helfen... Und wofür um himmelswillen Brauchst du die ". Schleife?! Ich hoffe irgendwer kann mich mal aufklären ^^

    Zeit messung von gestarteten fenstern bis der ladevorgang beendet wurde.... also du musst dir vostellen du hast 10 werte untereinander aufgelistet, dann musst du mit dem controlsend um jedenwert einmal zu starten +1 Down-Enter senden... spirch erste runde down1 -Enter ( Baustein wird geöffnet)und zweite runde down2 -Enter ( Baustein wird geöffnet) usw usw....
    und die andere schleife ist dafür gedacht das der automatisch erkennt welcher baustein grade gestartet wurde um dies in die datei zu schreiben: Baustein 1 benötigt 000 Sekunde.... nächste runde Baustein 2 benötigt 40 Sekunde

  • Hi,

    nimm die 2.te Schleife (For $d = ) raus und setze:
    $String = "{Down " & $i + 1 & "}"

    ;-))
    Stefan

    • Offizieller Beitrag

    Wie schon gesagt wurde: Laß die 2.te Schleife weg , denn dadurch, dass du in Schleife 1 durch das Array iterierst werden nacheinander alle 10 Elemente angesprochen. Und dann passiert alles, wie du (vermutlich) willst:
    - Starte Schleife mit erstem Wert aus Array
    - führe Code bezogen auf ersten Arraywert aus
    - wechsele zum nächsten Arraywert und tue dort dasselbe

  • Hi,

    nimm die 2.te Schleife (For $d = ) raus und setze:
    $String = "{Down " & $i + 1 & "}"

    ;-))
    Stefan

    Das WARS!!!! jetzt hat es geklappt ... also reicht wohl eine schleife :)
    sorry leute für diesen verwirrenden tread....
    Danke an ALLE!!! NR1 Forum

  • Eine Frage habe ich noch :)

    Kann mir einer Vllt. sagen, warum ich immer bei der Zeit berrechnung 1,5 Sek zurück bekomme ?

  • So habe ich es im script drinne

    [autoit]


    $Zeit = 1500
    $Newzeit = mstos($zeit)
    $pfad = "C:\Startlog.txt"

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

    $begin = TimerInit();Zeitstart
    ControlSend($Produktbaustein,"","TTreeView1","{enter}")
    $ende = TimerDiff($begin);Zeitstop
    FileWriteLine($pfad,$Bausteine[$i]& " benötigt für den Start : " &$Newzeit & " Sekunden!")
    MsgBox(0, $Bausteine[$i], $Bausteine[$i] & FileRead($pfad),5)

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

    Func mstos($z)
    Return Round($z / 1000, 1);1 Nachkommastelle
    EndFunc

    [/autoit]

    *EDIT schon gelöst :)

    Einmal editiert, zuletzt von Baris (20. Mai 2010 um 14:21)