Anfänger-Frage zum Programmier-Stil und Datei-Handling

  • Hallo zusammen,

    ich bin absoluter Einsteiger, was Programmiersprachen angeht und habe bisher ausser mit HTML und ein wenig Flash keinerlei Erfahrung. Als ich durch Zufall auf AutoIt aufmerksam geworden bin und hier im Forum gesehen habe, welche schier unbegrenzten Möglichkeiten sich damit bieten, hat mich das Fieber gepackt.

    Aber aller Anfang ist bekanntlich schwer und so habe ich mal damit angefangen, mich durch ein paar hier veröffentlichte Beispielscripte zu "kämpfen" und sie mal für meine ersten Gehversuche anzupassen, was eigentlich auch schon ganz gut funktioniert hat.
    Allerdings bin ich bereits an meine Grenzen gestossen, als ich versucht habe, die verschiedenen Einzelscripte aneinander zu hängen und daraus ein einziges Script zu erstellen.

    So beginnt zum Beispiel ein Scriptteil mit einer While-Schleife und endet dann auch mit WEnd.

    Wenn ich nun dahinter einen weiteren Scriptteil anfüge, wird dieser aber nicht mehr abgearbeitet, vermutlich wohl wegen dem WEnd.
    Soviel habe ich durch die SuFu hier bereits herausgefunden. Allerdings habe ich nirgends eine Antwort darauf gefunden, wie man dahinter stehende Scriptzeilen dennoch ausführen lassen kann oder ich ob das WEnd einfach an das Ende des Scripts stellen muss, damit das Script ordnungsgemäß weiterläuft.

    Hier mal das Beispiel dazu:

    Spoiler anzeigen

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Eingabe", 236, 106, 193, 115)
    $Label1 = GUICtrlCreateLabel("Eingabe:", 16, 24, 60, 17)
    $Input1 = GUICtrlCreateInput("", 80, 19, 90, 21)
    $Button1 = GUICtrlCreateButton("OK", 32, 56, 75, 25, 0)
    $Button2 = GUICtrlCreateButton("Abbruch", 128, 56, 75, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE, $Button2
    Exit

    Case $Button1
    $file = FileOpen("test.txt", 2)
    FileWriteLine($file, GUICtrlRead($Input1))
    Exit

    EndSwitch
    WEnd

    $file = FileOpen("test2.txt", 2)

    ; Check if file opened for reading OK
    If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
    EndIf..............

    Das ist vermutlich auch nur ein Problem von vielen, das mir im Laufe der Zeit mit AutoIT noch weitere Rätsel aufgeben wird.

    Gibt es eigentlich so etwas wie einen Leitfaden, wie man sich einen sauberen Programmierstil angewöhnen kann, um nicht ständig in solche Stolperfallen zu geraten?

    Mir ist natürlich klar, dass man AutoIt nicht von heute auf morgen lernt und es seine Zeit braucht, bis man in der Lage ist Syntax- und Schönheitsfehler in der Programmierung zu erkennen und zu bereinigen.
    Allerdings bin ich jetzt von AutoIt so begeistert und fasziniert, dass ich auf jeden Fall weitermachen möchte. Die Kunst dabei ist schließlich auch, immer einmal mehr aufzustehen, als man hinfällt. :thumbup:

    Eine weitere Frage hätte ich noch, da ich im Forum hierüber auch nichts finden konnte.

    Mit dem InetGet-Befehl kann ich Dateien vom Webserver holen und mit $Ftpp = _FtpPutFile auch wieder zurückkopieren. Gibt es eigentlich auch eine Möglichkeit, Dateien bzw. ganze Verzeichnisse auf dem Webserver zu löschen?

    Vielen Dank für Eure Unterstützung.

    Mick

    • Offizieller Beitrag

    Hallo!

    Schöner erster Post :love: .

    Ich glaube, dass sauberer Stil einfach mit der Zeit kommt. Irgendwann will man von sich aus sauberen Code schreiben, weil man sonst nicht mehr klar kommt und weil man nur sauberen Code "schön" findet. Das passiert aber erst, wenn man Sachen auf mindestens zwei Wegen lösen kann, denke ich ;). Mach dir da also erst mal nicht so viele Sorgen - Hauptsache es funktioniert am Anfang :rofl: .

    In der FTP.au3 (habe gerade nicht im Kopf, ob die inzwischen bei AutoIt fest dabei ist) gibt es bestimmt auch _FTPFileDelete oder so . Dazu gibt es Funktionen, um wie mit FileFindFirstFile und FileFindNextFile durch ein Verzeichnis zu "laufen". (Wenn es nicht dabei ist, dann bei https://autoit.de/www.autoitscript.com im Forum suchen...).

    Das Einbauen ist nicht trivial meistens. In deinem Beispiel ist es ein Skript mit GUI (Oberfläche) und eines ohne. Das kann man relativ einfach verknüpfen:
    - Einen weiteren Button erstellen wie die anderen, aber mit anderer Variable vorne, z.B. $Button3 = GUICtrlCreateButton("Neuer Button", 228, 56, 75, 25, 0)
    - Den Button auf Klicks horchen lassen: Case $Button3
    - Darunter das andere Skript einfügen (noch vor dem nächsten Case oder EndSwitch)
    So der grobe Ablauf :).

    Viel Erfolg weiterhin mit AutoIt - sehe da durchaus Potential und mit dem Poststil bist du hier jederzeit herzlich willkommen ;)

    Gute Nacht,
    peethebee

    • Offizieller Beitrag

    Hi,

    wirklich guter 1st post!

    Zu deiner Frage: While 1 ... Wend ist eine Endlosschleife, weil 1 immer 1 bleibt. Du musst dir das quasi übersetzen.
    Solange 1 laufe immer wieder durch das was dazwischen steht.

    Entweder du baust eine Abbruchbedingung ein Do until ... oder For ... Next oder du rufst deinen Code aus der Schleife heraus aus über Funktionen oder du nutzt das Wort Exitloop.

    Mega

  • Hallo Peethebee und Xenobiologist,

    zuerst einmal vielen Dank für Eure prompte Hilfe und Beantwortung meiner Fragen.
    Ich werde dann auch gleich mal Eure vorgeschlagenen Lösungen ausprobieren und mich freuen, wenn ich was dazugelernt habe.

    Dass Usern hier in diesem Forum wirklich schnell und auch umfassend geholfen wird, habe ich bereits feststellen können, als ich hier anfangs nur lesend als Gast vorbeigeschaut habe. Außerdem habt Ihr hier in diesem Forum ein wirkliches angenehmes "Betriebsklima", was den Umgang mit- und untereinander angeht, was so in dieser Form nur in wenigen anderen Foren zu finden ist.

    Respekt, das steigert den Wohlfühlfaktor gleich nochmals. :thumbup:

    Nochmals danke für Eure schnelle Hilfe.

    FG

    Mick

  • wenn du einfach mehrere Endlosschleifen haben willst bzw nicht weißt wann du stoppen sollst, dann kannst du auch Funktionen einfügen :

    Func Blah
    hier dein teil bzw die ganze Datei rein
    EndFunc Blah
    Func Blahzwei
    ....
    EndFunc

    und dann :

    Blah()
    Blahzwei()

    so kannst du beides aufrufen

    MFG Berlinermauer