ContinueCase,/ErrorStdOut,etc

  • Hallo, habe mal ein paar Fragen:
    1)Gibt es etwas ähnliches wie ContinueCase, welcher nicht zum nächsten Fall, sondern ans Ende des Switch springt?
    (2)/ErrorStdOut leitet >alle< möglichen kritischen Fehler nach StdOut?
    (3)Wenn die Option nicht aktiviert ist, wohin gehen sie dann? Ich habe noch kein popup à là "Error47219: Unknown ..." gesehen oder ähnliches.
    (4)Man muss Argumente in der Form -argumentwert angeben, oder kann man auch -argument wert ohne die "" angeben? Wie heisst die UDF die das macht?
    Was ist in der Hilfe gemeint mit:

    [autoit]

    "Run(@AutoItExe & ' /AutoIt3ExecuteLine "MsgBox(0, ''Hallo Welt!'', ''Hi!'')"')

    [/autoit]


    (5)Warum schreibt man nicht

    [autoit]

    MsgBox(0, ''Hallo Welt!'', ''Hi!'')

    [/autoit]


    direkt in die Datei?!

    Zitat

    "Form4:

    [autoit]

    AutoIt3.exe [/ErrorStdOut] /AutoIt3ExecuteLine
    "Befehlszeile"

    [/autoit]


    Ausführen einer Zeile mit Code.

    Um eine einzelne Zeile
    mit Code auszuführen ist folgender Befehl auszuführen:

    [autoit]

    Run(@AutoItExe & '
    /AutoIt3ExecuteLine "MsgBox(0, ''Hallo Welt!'', ''Hi!'')"')

    [/autoit]

    (6)Wo kann ich Fehler die ich in der Hilfe finde mitteilen /selber verbessern?


    Danke für die Antwort im voraus
    Dr.Doktor

  • zu 1) meinst du ExitLoop?

    zu 6) siehe meine Signatur. Da findest du alle Links :thumbup:

  • Ja, sowas wie ExitLoop, nur mit Switch. In der Hilfe von ExitLoop steht:
    "Beendet eine While-, Do- oder For-Schleife." Und wenn ich einen Case beenden und zum Ende dieses Case springen will? Muss ichn Loop drum bauen ums Switch um dann aus diesem zu springen?

  • Ja, sowas wie ExitLoop, nur mit Switch. In der Hilfe von ExitLoop steht:
    "Beendet eine While-, Do- oder For-Schleife." Und wenn ich einen Case beenden und zum Ende dieses Case springen will? Muss ichn Loop drum bauen ums Switch um dann aus diesem zu springen?


    1) Warum? Wenn eine Bedingung erfüllt ist, ist Switch/Select nach diesem Case eh beendet.

    (Nicht evtl. durch andere Sprachen irritieren lassen, bei denen man bei Case noch ein Break braucht um nicht in das nächste Case "reinzulaufen" - verwirrt mich bei Basic-Dialekten, wie AutoIt, auch immer wieder ... )

    2) Ja - also alles, das ein Ausführen des Programmes verhindert.

    3) Noch nie? Bau mal gezielt einen Syntax-Fehler ein, kompilier das Programm und starte es, dann siehst du sicher eine Meldung, daß in "line -1" was nicht stimmt.

    4) was genau meinst du?

    5) Das ist einfach nur ein Beispiel wie man eine Zeile AutoIt-Code direkt über die AutoItExe ausführen kann, wobei das aus einem AutoIt-Programm heraus (natürlich) sinnfrei ist.
    Eine Anwendungsmöglichkeit wäre z.B. in einer Batch-Datei und selbst da kommt man mit einem Einzeiler auch nicht weit ...

  • Zitat

    1) Warum? Wenn eine Bedingung erfüllt ist, ist Switch/Select nach diesem Case eh beendet.

    Allerdings kann ich ihn (wenn ich z.b. bedingugnen prüfe) nicht sofort aus dem Case werfen (außer ich setze diesen case immer ans ende, so das es keinen nächsten case gibt) . Beispeil folgendes Konstrukt:

    [autoit]

    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1_berechnen
    if NOT $remember_checkbox_benzin_oel = "oel" AND Not $remember_checkbox_benzin_oel = "benzin" Then
    TrayTip("Peugeot 103 Gemischrechner:","Bitte wähle, ob du die Menge des hinzuzufügenden Öls herausfinden möchtest, oder die korrekte Menge Benzin",10)
    ContinueCase
    EndIf
    if StringIsDigit(GuiCtrlRead($Input1)) = False AND StringIsFloat(GuiCtrlRead($Input1)) = False Then
    ;MsgBox(0,"StringIsDigit:" &StringIsDigit(GuiCtrlRead($Input1)),GuiCtrlRead($Input1))
    TrayTip("Peugeot 103 Gemischrechner:","Eingegebener Wert muss eine Zahl sein!",10)
    ContinueCase
    EndIf

    [/autoit]


    OK, mir fällt ein ich könnte prüfen ob die bedingung wahr ist und wenn ja, dann führt ein if den Code danach aus... Ja ich bin noch sehr jung dabei, Python is auch schon bisschen her :) Aber für manche konstrukte könnte so ein EndSwitch doch nützlich sein? Oder baut man in dem speziellen Fall nen While 1 drum und springt mit ExitLoop raus?

    Zitat


    (Nicht evtl. durch andere Sprachen irritieren lassen, bei denen man bei Case noch ein Break braucht um nicht in das nächste Case "reinzulaufen" - verwirrt mich bei Basic-Dialekten, wie AutoIt, auch immer wieder ... )

    Bei C++ hat ich das, kann das sein? (Hab jetzt die uralten Sourcen von mir nicht zur Hand)

    Zitat

    3) Noch nie? Bau mal gezielt einen Syntax-Fehler ein, kompilier das Programm und starte es, dann siehst du sicher eine Meldung, daß in "line -1" was nicht stimmt.


    Ah, habe mal das SciTe Outputfenster näher untersucht, SciTe ruft AutoIt mit dem Argument /ErrorStdOut auf. dann is ja klar.

    Code
    >"E:\Programme\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "E:\Dokumente und Einstellungen\Administrator\Desktop\autoit\autoit_gemischrechner.au3"
    E:\Dokumente und Einstellungen\Administrator\Desktop\autoit\autoit_gemischrechner.au3 (8) : ==> Missing separator character after keyword.: 
    ddfd 
    ddfd^ ERROR
    Zitat

    4) was genau meinst du?


    Ich möchte -x 50 eingeben können und dieses als 1 Argument verarbeiten, aber dies geht nach meinem derzeitgen Wissensstand nur durch "-x 50". $CmdLine[1] hätte ja dann -x und CmdLine[2] = 50, allerdings hät ich gern $CmdLine[1] = -x 50.

    Zitat

    5) Das ist einfach nur ein Beispiel wie man eine Zeile AutoIt-Code direkt über die AutoItExe ausführen kann, wobei das aus einem AutoIt-Programm heraus (natürlich) sinnfrei ist.
    Eine Anwendungsmöglichkeit wäre z.B. in einer Batch-Datei und selbst da kommt man mit einem Einzeiler auch nicht weit ...

    Ja, und auch in einer Batch-File muss ich es nicht an Run() übergeben, also sinnfrei trifft es da wirklich exzellent.

  • 1. wenn ein case zutrifft und dieser abgearbeitet wurde, dann werden die anderen case sowieso nichtmehr angesehn
    Beispiel: sowohl case nr 2 ($var >= 3) als auch case nr3 ($var <= 7) treffen zu. angezeigt wird aber nur MsgBox(0,'','>=3') und dannach wird kein anderer vergleich mehr gemacht.

    Spoiler anzeigen
    [autoit]

    $var = 5
    Select
    Case $var >= 7
    MsgBox(0,'','>=7')
    Case $var >= 3
    MsgBox(0,'','>=3')
    Case $var <= 7
    MsgBox(0,'','<=7')
    Case $var >= 3
    MsgBox(0,'','<=3')
    Case Else
    msgbox(0,'','komisch...')
    EndSelect

    [/autoit]
    Zitat

    Bei C++ hat ich das, kann das sein? (Hab jetzt die uralten Sourcen von mir nicht zur Hand)

    richtig wäre:
    bei C++ musst du das break eingeben um nicht den nächsten case zu überprüfen zu lassen

    bei autoit wird standartmäßig quasi ein break gesetzt (auser du schreibst continuecase)

    Zitat

    Ich möchte -x 50 eingeben können und dieses als 1 Argument verarbeiten, aber dies geht nach meinem derzeitgen Wissensstand nur durch "-x 50". $CmdLine[1] hätte ja dann -x und CmdLine[2] = 50, allerdings hät ich gern $CmdLine[1] = -x 50.

    also entweder du fügst $CmdLine[1] und CmdLine[2] nach dem auslesen zusammen: $parameter = String($CmdLine[1] & CmdLine[2])

    oder du verwendest als parameter -x50 das kannste dann mit stringleft und stringright wieder trennen. (falls du zum beispiel die 50 als wert verwenden möchtest)

  • Zitat

    Bei C++ hat ich das, kann das sein? (Hab jetzt die uralten Sourcen von mir nicht zur Hand)


    Nicht nur bei C++ - C, Java, JavaScript, php - allerdings die meisten anderen Sprachen haben sowas nicht.
    Python hat gar keinen switch/select, außer eben diese Emulation über dict.get()

    Zu deinem "Case" Problem:
    Leider ist nicht zu sehen was als nächtest Case kommt, aber ich tippe mal, daß anstelle diesen ContinueCase Funktionsaufrufe besser währen, anstatt zu viel Funktionalität in den Message-Loop einzubauen und ContinueCase als Pseudo-Goto zu verwenden.