wiederkehrende ablaeufe

  • hallo leute,

    ich habe mir ein autoit-script gebastelt, was soweit wunderbar funktioniert.
    aber ich moechte es weiter optimieren, etwas eleganter schreiben, denn bis jetzt
    ist es relativ simple aufgebaut, mit vielen wiederholungen, die man sicher etwas
    abkuerzen kann. nur hab ich noch nicht rausgefunden, wie ich das am besten mache.

    ein beispiel:


    [autoit]


    AUTOITSETOPTION('TRAYICONHIDE',0)
    AUTOITSETOPTION('WINTITLEMATCHMODE',4)

    [/autoit]

    hier kommt jede menge script-ablauf, der soweit passt und der voraussetzung ist,
    fuer meine erste schleife, die da folgt ...

    [autoit]


    FOR $I=1 TO 4

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

    IF $I=1 THEN
    $PFAD_X='C:\TEMP\ERRORS\E1'
    ENDIF

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

    IF $I=2 THEN
    $PFAD_X='C:\TEMP\ERRORS\E2'
    ENDIF

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

    IF $I=3 THEN
    $PFAD_X='C:\TEMP\ERRORS\E3'
    ENDIF

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

    IF $I=4 THEN
    $PFAD_X='C:\TEMP\ERRORS\E4'
    ENDIF

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

    FILEDELETE($PFAD_X&'\FEHLER.TXT')

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

    NEXT

    [/autoit]

    dann wieder ne laengere script-folge, die die naechste schleife vorbereitet:

    [autoit]


    FOR $I=1 TO 4

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

    IF $I=1 THEN
    $PFAD_X='C:\TEMP\ERRORS\E1'
    ENDIF

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

    IF $I=2 THEN
    $PFAD_X='C:\TEMP\ERRORS\E2'
    ENDIF

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

    IF $I=3 THEN
    $PFAD_X='C:\TEMP\ERRORS\E3'
    ENDIF

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

    IF $I=4 THEN
    $PFAD_X='C:\TEMP\ERRORS\E4'
    ENDIF

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

    FILEDELETE($PFAD_X&'\FEHLER-NEU.TXT')

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

    NEXT

    [/autoit]

    dann wieder ne laengere script-folge, die die naechste schleife vorbereitet:

    [autoit]


    FOR $I=1 TO 4

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

    IF $I=1 THEN
    $PFAD_X='C:\TEMP\ERRORS\E1'
    ENDIF

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

    IF $I=2 THEN
    $PFAD_X='C:\TEMP\ERRORS\E2'
    ENDIF

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

    IF $I=3 THEN
    $PFAD_X='C:\TEMP\ERRORS\E3'
    ENDIF

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

    IF $I=4 THEN
    $PFAD_X='C:\TEMP\ERRORS\E4'
    ENDIF

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

    FILEDELETE($PFAD_X&'\FEHLER-GANZ-NEU.TXT')

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

    NEXT

    [/autoit]

    usw.


    ich habe in meinem script also jede menge schleifen, die eigentlich identisch
    aufgebaut sind, nur die jeweilige ausfuehrung ist eine andere.

    deshalb dachte ich mir, ich koennte die eigentliche schleife in einer art function
    zusammenfassen, und dann nur noch per call aufrufen:

    [autoit]


    FUNC SCHLEIFE ()

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

    FOR $I=1 TO 4

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

    IF $I=1 THEN
    $PFAD_X='C:\TEMP\ERRORS\E1'
    ENDIF

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

    IF $I=2 THEN
    $PFAD_X='C:\TEMP\ERRORS\E2'
    ENDIF

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

    IF $I=3 THEN
    $PFAD_X='C:\TEMP\ERRORS\E3'
    ENDIF

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

    IF $I=4 THEN
    $PFAD_X='C:\TEMP\ERRORS\E4'
    ENDIF

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

    ENDFUNC

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

    CALL ('SCHLEIFE')

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

    FILEDELETE($PFAD_X&'\FEHLER-GANZ-NEU.TXT')

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

    NEXT

    [/autoit]


    doch wie ich feststellen musste, habe ich da wohl noch einen geheorigen
    denkfehler irgendwo.

    wie kann ich immer wieder kehrenden code einmal festhalten und dann an ver-
    schiedenen stellen wieder aufrufen?

    hiiieeelllfffeee...


    so long

    sam

    bernd670: Tags gesetzt!

    • Offizieller Beitrag

    Hallo,

    die Funktion würde ich in etwa so schreiben:

    [autoit]

    Func DelErrorFile($FileName)
    For $I=1 To 4
    FileDelete('C:\TEMP\ERRORS\E' & $I &'\' & $FileName)
    Next
    EndFunc

    [/autoit]

    und dann an entsprechender Stelle so aufrufen:

    [autoit]

    DelErrorFile("FEHLER.TXT")

    [/autoit][autoit]

    DelErrorFile("FEHLER-NEU.TXT")

    [/autoit][autoit]

    DelErrorFile("FEHLER-GANZ-NEU.TXT")

    [/autoit]
  • Am besten in eine Funktion reinschreiben:

    Spoiler anzeigen
    [autoit]

    Opt("TrayIconHide", 0)
    Opt("WinTitleMatchMode", 4)

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

    ; usw.

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

    Delete("Fehler.txt")

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

    ; usw ..

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

    Delete("Fehler-neu.txt")

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

    ; usw.

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

    Delete("Fehler-ganz-neu.txt")

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

    ;===============================================================================
    Func Delete($sFile)
    For $i = 1 To 4
    FileDelete("C:\TEMP\ERRORS\E" & $i & "\" & $sFile)
    Next
    EndFunc ;==>Delete

    [/autoit]

    Viele Grüße
    Stilgar

  • hi bernd, hi stilgar,

    danke fuer die schnelle hilfe. fuer das konkrete beispiel, das ich gebracht habe, hattet ihr beide die perfekte loesung.

    war aber nur ein beispiel. klaert noch nicht meine frage, die ich vielleicht falsch vormuliert hatte oder mit dem falschen beispiel beschrieben.

    lasst es mich mal so versuchen:

    ich habe eine folgende schleife:


    FOR $I=1 TO 6

    IF $I=1 THEN
    $PFAD_X='K:\Users\mikesch\fehler\test'
    ENDIF

    IF $I=2 THEN
    $PFAD_X='L:\temporaer\errors\meier'
    ENDIF

    IF $I=3 THEN
    $PFAD_X='M:\weiss_nicht\mehr\fatal'
    ENDIF

    IF $I=4 THEN
    $PFAD_X='N:\network\fund'
    ENDIF

    IF $I=5 THEN
    $PFAD_X='\\computer2\network\mueller'
    ENDIF

    IF $I=6 THEN
    $PFAD_X='\\computer7\suche\schulz'
    ENDIF

    FILEDELETE($PFAD_X&'\FEHLER.TXT')
    FILEDELETE($PFAD_X&'\fehler-2.log')
    FILEDELETE($PFAD_X&'\test.rar')

    NEXT


    also $PFAD_X nimmt in der schleife die abartigsten werte an, die in keine logische folge zu bringen sind. und auch die ausfuehrungen koennen unterschiedlich sein.

    was ich sagen will: wie kann ich eine immer wieder gleiche abfolge von befehlen (ob das nun eine schleife ist oder sonstwas) an verschiedenen stellen eines scriptes aufrufen, ohne die abfolge immer wieder per copy&paste in dem script zu plazieren.

    meine idee war als func. aber vielleicht muss man das anders aufbauen. eine goto-befehl???

    jetzt verstaendlicher, was ich will?

    danke

    so long

    sam

    4 Mal editiert, zuletzt von sam ghost (17. August 2007 um 00:21)

  • Indem du wie in unseren Beispielen die immer wiederkehrenden Befehle in eine Funktion schreibst und an benötigter Stelle wieder aufrufst.

    [autoit]


    ; ... Programm ...
    Funktion1()
    ; ... Programm ...
    Funktion1()
    ; ... Programm ...
    Func Funktion1()
    ; hier die Befehle rein
    Return
    EndFunc

    [/autoit]


    Oder wie hier in der Kurzfassung für dein letztes Beispiel:

    [autoit]

    Dim $aPfad[6] = ['K:\Users\mikesch\fehler\test', _
    'L:\temporaer\errors\meier', _
    'M:\weiss_nicht\mehr\fatal', _
    'N:\network\fund', _
    '\\computer2\network\mueller', _
    '\\computer7\suche\schulz']

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

    Dim $aFiles[3] = ['\FEHLER.TXT', '\fehler-2.log', '\test.rar']

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

    Delete($aPfad,$aFiles)

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

    Exit
    ;===============================================================================
    Func Delete(ByRef $aPfad, ByRef $aFile)
    Local $i, $j

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

    For $i = 0 To UBound($aPfad) - 1
    For $j = 0 To UBound($aFile) - 1
    FileDelete($aPfad[$i] & $aFile[$j])
    Next
    Next

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

    Return
    EndFunc ;==>Delete

    [/autoit]

    Viele Grüße
    Stilgar