Autoit Vorgang wiederholen, TXT auslesen Zeile +1

  • Guten Tag zusammen,

    ich habe ein Problem, ich möchte eine Abfrage erstellen, diese muss sich wiederholen.

    Ich möchte in der Abfrage Zeile X auslesen und einsetzen, dann den Rest des Vorgangs, der Vorgang muss wieder von vorne beginnen aber Zeile X+1 einsetzen, dann der Rest dann von vorn mit Zeile X+2 usw.

    Hier mal der Code, ich komme da leider nicht weiter. =(

    [autoit]

    _IEFormElementSetValue ($oQuery2, FileReadLine("LBestand.txt", 2))
    $Seach2 = _IEGetObjByName($IE,"ShowSearch")
    _IEAction($Seach2,"click")
    sleep(1000)
    _IELOADWAIT($IE)
    _IELOADWAIT($IE)
    _IENavigate($IE, "javascript:MarkAll('Form_Liste')", 0)

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

    $oForm_LS = _IEFormGetObjByName ($IE, "Form_Liste")
    $oQuery3 = _IEFormElementGetObjByName ($oForm_LS, "art_tmp")
    _IEFormElementSetValue ($oQuery3, "ebayenditemsure")
    $Show = _IEGetObjByName($IE,"Ausfuehren_Button")
    _IEAction($Show,"click")

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

    _IELOADWAIT($IE)
    $oForm_OF = _IEFormGetObjByName ($IE, "enditemform")
    $oQuery4 = _IEFormElementGetObjByName ($oForm_OF, "EndItemReason")
    _IEFormElementSetValue ($oQuery4, "NotAvailable")

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

    $Submitx = _IEGetObjByName($IE,"ConfirmButton")
    _IEAction($Submitx,"click")

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

    _IELOADWAIT($IE)
    _IENavigate($IE, "Linked.x")

    [/autoit]

    Hoffe das Problem ist verständlich Bei jedem neuen Durchlauf also

    [autoit]

    _IEFormElementSetValue ($oQuery2, FileReadLine("LBestand.txt", 2))

    [/autoit]


    um eine Zeile (also in dem Fall 3) erhöhen, bis das Dokument endet.

    Vielen Danke!

  • Moin moin,

    du kannst hier doch recht einfach mit einer For Schleife Arbeiten.

    Die Hilfe zeigt die dafür folgendes:

    [autoit]


    ; Read in lines of text until the EOF is reached
    While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    MsgBox(0, "Line read:", $line)
    Wend

    [/autoit]

    Also zb:

    [autoit]


    While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    _IEFormElementSetValue ($oQuery2, $line)
    $Seach2 = _IEGetObjByName($IE,"ShowSearch")
    _IEAction($Seach2,"click")
    sleep(1000)
    _IELOADWAIT($IE)
    _IELOADWAIT($IE)
    _IENavigate($IE, "javascript:MarkAll('Form_Liste')", 0)

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

    $oForm_LS = _IEFormGetObjByName ($IE, "Form_Liste")
    $oQuery3 = _IEFormElementGetObjByName ($oForm_LS, "art_tmp")
    _IEFormElementSetValue ($oQuery3, "ebayenditemsure")
    $Show = _IEGetObjByName($IE,"Ausfuehren_Button")
    _IEAction($Show,"click")

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

    _IELOADWAIT($IE)
    $oForm_OF = _IEFormGetObjByName ($IE, "enditemform")
    $oQuery4 = _IEFormElementGetObjByName ($oForm_OF, "EndItemReason")
    _IEFormElementSetValue ($oQuery4, "NotAvailable")

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

    $Submitx = _IEGetObjByName($IE,"ConfirmButton")
    _IEAction($Submitx,"click")

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

    _IELOADWAIT($IE)
    _IENavigate($IE, "Linked.x")
    WEnd

    [/autoit]

    Das sollte es eigentlich sein.
    Du startest halt nur in der 1. Zeile und nicht in der 2...

    Das könnte man ggf. umgehen mit einer For-Schleife.
    Von 2 bis iwas ganz hohes ;)

    [autoit]


    ; Read in lines of text until the EOF is reached
    For $i = 2 To 1000000000000 Step 1
    $line = FileReadLine($file, $i)
    If @error = -1 Then ExitLoop
    MsgBox(0, "Line read:", $line)
    Next

    [/autoit]

    Sollte so gehen Theoretisch ;)

    Also zb:

    [autoit]


    For $i = 2 To 1000000000000 Step 1
    $line = FileReadLine($file, $i)
    If @error = -1 Then ExitLoop
    _IEFormElementSetValue ($oQuery2, $line)
    $Seach2 = _IEGetObjByName($IE,"ShowSearch")
    _IEAction($Seach2,"click")
    sleep(1000)
    _IELOADWAIT($IE)
    _IELOADWAIT($IE)
    _IENavigate($IE, "javascript:MarkAll('Form_Liste')", 0)

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

    $oForm_LS = _IEFormGetObjByName ($IE, "Form_Liste")
    $oQuery3 = _IEFormElementGetObjByName ($oForm_LS, "art_tmp")
    _IEFormElementSetValue ($oQuery3, "ebayenditemsure")
    $Show = _IEGetObjByName($IE,"Ausfuehren_Button")
    _IEAction($Show,"click")

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

    _IELOADWAIT($IE)
    $oForm_OF = _IEFormGetObjByName ($IE, "enditemform")
    $oQuery4 = _IEFormElementGetObjByName ($oForm_OF, "EndItemReason")
    _IEFormElementSetValue ($oQuery4, "NotAvailable")

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

    $Submitx = _IEGetObjByName($IE,"ConfirmButton")
    _IEAction($Submitx,"click")

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

    _IELOADWAIT($IE)
    _IENavigate($IE, "Linked.x")
    Next

    [/autoit]

    Mit freundlichen Grüßen
    lachi

  • Edit:

    So, also ich habe es jetzt so, dass es "eigentlich" gehen sollte, tut es aber nicht, denn jetzt nimmt er IMMER die erste Zeile.

    Code:

    [autoit]

    For $i = 2 To 1000000000000 Step 1
    $file = "LBestand.txt"
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    $oForm_AB_ = _IEFormGetObjByName ($IE, "Form_Suche")
    $oQuery2_ = _IEFormElementGetObjByName ($oForm_AB_, "ListerHistory_Suchbegriff")
    _IEFormElementSetValue ($oQuery2_, $line)
    $Seach2_ = _IEGetObjByName($IE,"ShowSearch")
    _IEAction($Seach2_,"click")
    sleep(1000)
    _IELOADWAIT($IE)
    _IELOADWAIT($IE)
    _IENavigate($IE, "javascript:MarkAll('Form_Liste')", 0)

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

    $oForm_LS_ = _IEFormGetObjByName ($IE, "Form_Liste")
    $oQuery3_ = _IEFormElementGetObjByName ($oForm_LS_, "art_tmp")
    _IEFormElementSetValue ($oQuery3_, "ebayenditemsure")
    $Show_ = _IEGetObjByName($IE,"Ausfuehren_Button")
    _IEAction($Show_,"click")

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

    _IELOADWAIT($IE)
    $oForm_OF_ = _IEFormGetObjByName ($IE, "enditemform")
    $oQuery4_ = _IEFormElementGetObjByName ($oForm_OF_, "EndItemReason")
    _IEFormElementSetValue ($oQuery4_, "NotAvailable")

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

    $Submitx_ = _IEGetObjByName($IE,"ConfirmButton")
    _IEAction($Submitx_,"click")

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

    _IELOADWAIT($IE)
    _IENavigate($IE, "Linked.x")
    Next
    MsgBox(0, "Fertig", "Abgeschlossen")
    Exit

    [/autoit]

    Einmal editiert, zuletzt von vism (22. November 2012 um 14:09)

  • Er braucht ja auch die Zeile.
    Dafür ist ja das $i da.

    Der Wert wird von der For-Schleife immer um 1 hochgezählt.

    [autoit]

    $line = FileReadLine($file, $i)

    [/autoit]
  • Er braucht ja auch die Zeile.
    Dafür ist ja das $i da.

    Der Wert wird von der For-Schleife immer um 1 hochgezählt.

    [autoit]

    $line = FileReadLine($file, $i)

    [/autoit]

    Hi,

    danke, das hatte ich gerade auch rausgefunden das klappte auch, jetzt brauche ich noch eine If abfrage, es kann vorkommen dass

    [autoit]

    _IENavigate($IE, "javascript:MarkAll('Form_Liste')", 0)

    [/autoit]

    (und alles danach)
    nicht zutrifft, also diese Checkbox nicht angezeigt wird, wenn das passiert soll er überspringen udn die Abfrage mit der nächste Zeile neu starten, geht das auch? =/
    Also so funktioniert das alles perfekt, nur wenn eben diese Sache auftaucht, dann ist vorbei. =(
    Wie kann ich das umgehen?

  • Hallo vism,

    [autoit]

    _IENavigate($IE, "javascript:MarkAll('Form_Liste')", 0)

    [/autoit]

    ist keine gültige URL. Beschreibe bitte dein Vrhben etws genauer.Vielleicht findert sich j dnn eine Lösung für das Problem.

    mfg autoBert

  • Hallo vism,

    [autoit]

    _IENavigate($IE, "javascript:MarkAll('Form_Liste')", 0)

    [/autoit]

    ist keine gültige URL. Beschreibe bitte dein Vrhben etws genauer.Vielleicht findert sich j dnn eine Lösung für das Problem.

    mfg autoBert


    Hallo,

    danke für die Antwort, also, der Befehl macht nichts, außer eben alle Einträge zu markieren, das funktioniert auch alles, es kann aber vorkommen, dass keine Einträge vorhanden sind, dann wartet Autoit ja auf die Checkbox...Wenn die aber nicht kommt? Was mache ich da? Soll ich es am besten erst mal mit einem Sleep versuchen? Aber dass hilft mir ja nicht hundert prozentig weiter, wenn bspw. die Ladezeit sich etwas in die Länge zieht oä.

  • Na dann noch ein einzelnes FileReadLine welches ins Leere läuft bevor die Schleife zur Abarbeitung beginnt und schon fährt er deutlich effektiver als die Zeile manuell anzugeben.
    Dann wird die Datei nämlich nur einmal geöffnet, wirklich Zeile für Zeile abgearbeitet und am Ende wieder einmal geschlossen.
    Bei manueller Zeilenangabe wird die Datei bei jedem! einzelnen Aufruf von FileReadLine geöffnet, die Datei Zeichen für Zeichen auf Zeilenumbrüche hin untersucht, die Anzahl der Zeilenumbrüche gezählt bis zur gewünschten Zeile, die Zeile zurückgegeben und dann wieder geschlossen.
    Das mag bei 100 Zeilen noch ganz witzig sein und zum Ziel führen.
    Je größer die Datei wird um so ineffizenter wird das ganze da die Ausführungszeit jedes einzelnen FileReadLine mit der Größe von $i steigt.