Wenn ich jetzt richtig verstehe, kann ich mit "False" auch sagen, dass nur die angegebenen Ordner eingelesen werden sollen!?
Ja, das geht auch!
Dann solltest Du aber die Konstante umbenennen, damit Du das Script später auch noch verstehst.
Wenn ich jetzt richtig verstehe, kann ich mit "False" auch sagen, dass nur die angegebenen Ordner eingelesen werden sollen!?
Ja, das geht auch!
Dann solltest Du aber die Konstante umbenennen, damit Du das Script später auch noch verstehst.
AutoIt ist viel komplizierter als VBA. In VBA habe ich z.B. auch "IIf", was ganz hilfreich ist, ein Äquivalent dazu scheint es in AutoIt nicht zu geben. Mehrere ENUM scheinen in AutoIt auch nicht möglich (damit könnte ich den Code verkürzen).
In VBA habe ich z.B. auch "IIf", was ganz hilfreich ist, ein Äquivalent dazu scheint es in AutoIt nicht zu geben.
Such mal nach "ternary". Dass ist genau das, wonach Du suchst.
Und was meinst Du mit mehrere ENUM? Beispielscript bitte!
Und was meinst Du mit mehrere ENUM? Beispielscript bitte!
Z.B. diese Zeile: Global Enum $e_idNew = 1000, $e_idOpen, $e_idSave, $e_idHelp,
Um Code zu kürzen, wären weitere Global Enum hilfreich. Eine mit Text (für die Button-Beschriftung), und eine mit Zahlen (für die Icon-Nummer). In VBA nutze man dafür einfach mehrer ENUM- oder Typ-Anweisungen.
Du meinst sowas?
Opt('MustDeclareVars', 1)
#include <Array.au3>
Global Enum $IllegalerEintrag1 = -1, $SicherheitsLevel1_1, $SicherheitsLevel1_2
Global Const $IllegalerEintrag2 = 2, $SicherheitsLevel2_1 = 9, $SicherheitsLevel2_2 = 3 ; hier macht Enum keinen Sinn, da keine Logik vorhanden
Global Const $SicherheitsLevel_1[3] = [$IllegalerEintrag1, $SicherheitsLevel1_1, $SicherheitsLevel1_2]
Global Const $SicherheitsLevel_2[3] = [$IllegalerEintrag2, $SicherheitsLevel2_1, $SicherheitsLevel2_2]
_Arraydisplay($SicherheitsLevel_1) ; -> -1, 0, 1
_Arraydisplay($SicherheitsLevel_2) ; -> 2, 9, 3
Sehr gut! Das Probiere ich mal. Das geht hoffentlich auch mit mehr als 2.
Wie meinst du das mit "mehr als 2"?
Ist das Gegenstück für IIf nicht einfach eine logische Verknüpfung?
Nicht, so wie ich Iif verstehe, denn als Ergebnis bekommt man ja nicht TRUE/FALSE, sondern den Wert von A bzw. B.
Also: $C = Iif($x > 50, $A, $B) ; wenn $x größer als 50, dann wird $A zurückgegeben, ansonsten $B.
Zumindest war das in alten AutoIt-Versionen mit "_Iif()" so. VBA kenne ich nicht.
In den neuen AutoIt-Versionen gibt es ja den ternären Operator: $C = $x > 50 ? $A : $B
Ah ok, dann habe ich es falsch verstanden
Dann ließe sich das doch (abgesehen von den ternären operatoren) mit einer eigenen Funktion basteln.
Fertige gefunden (https://www.autoitscript.com/f…-breaking-changes-_iif/):
Consolewrite(_Iif('200 = 200', 99, 2) & @CRLF) ; > 99
; #FUNCTION# ====================================================================================================================
; Name...........: _Iif
; Description ...: Perform a boolean test within an expression.
; Syntax.........: _Iif($fTest, $vTrueVal, $vFalseVal)
; Parameters ....: $fTest - Boolean test.
; $vTrueVal - Value to return if $fTest is true.
; $vFalseVal - Value to return if $fTest is false.
; Return values .: True - $vTrueVal
; False - $vFalseVal
; Author ........: Dale (Klaatu) Thompson
; Modified.......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: Yes
; ===============================================================================================================================
Func _Iif($fTest, $vTrueVal, $vFalseVal)
If $fTest Then
Return $vTrueVal
Else
Return $vFalseVal
EndIf
EndFunc ;==>_Iif
Alles anzeigen
In den neuen AutoIt-Versionen gibt es ja den ternären Operator: $C = $x > 50 ? $A : $B
Das Ergebnis ist aber das selbe.
mit einer eigenen Funktion basteln.
Dann würde ich aber keine Codezeilen sparen.
Das Ergebnis ist aber das selbe.
Dann würde ich aber keine Codezeilen sparen.
Das Ergebnis muss doch das Selbe sein, ich denke du suchst den Ersatz von IIf in Autoit?
Natürlich sparst du Codezeilen, allerdings nur bei mehrerer Verwendung von _Iif() bzw. Verschachtelung.
If...then...else = 5 Zeilen
_Iif = 1 Zeile + Einmalig 7 Zeilen
Bedeutet: Schon ab der 2. Verwendung sparst du Zeilen, bei nur einmaliger Verwendung brauchst du jedoch mehr.
Wobei ich die Funktion sogar noch so wegkürzen würde und die Gleiche Funktionalität hätte:
Func _Iif($fTest, $vTrueVal, $vFalseVal)
If $fTest Then Return $vTrueVal
Return $vFalseVal
EndFunc ;==>_Iif
Dann wäre es:
If...then...else = 5 Zeilen
_Iif = 1 Zeile + Einmalig 4 Zeilen
Bedeutet: Schon ab der 1. Verwendung nutzt du die Gleiche Anzahl an Zeilen und jede weitere spart dir Zeilen.
Du kannst diese Funktion auch in eine au3 Auslagern, die du am Anfang einbindest, dann brauchst du nur 1 Zeile zum Einbinden + max. 1 Zeile je Nutzung (egal welche Variante du wählst).
Wobei ich die Funktion sogar noch so wegkürzen würde und die Gleiche Funktionalität hätte:
Natürlich kann man _Iif auch als Funktion abbilden (war in alten Versionen ja so), aber wozu?
Der ternäre Operator wird mit Sicherheit schneller sein, weil er in AutoIt eingebaut ist und somit nicht erst vom Interpreter zur Laufzeit ausgeführt werden muss.
ich denke du suchst den Ersatz von IIf in Autoit?
Der Ternär macht doch was ich möchte.
Ich hab ja nur gesagt es gibt beide Möglichkeiten....
Und ich habe irgendwas im Hiunterkopf, das der ternäre unter bestimmten Bedingungen nicht funktioniert aber ggf. habe ch das aber noch falsch im Gedächtnis (oder bereits behoben).
Und ich habe irgendwas im Hiunterkopf, das der ternäre unter bestimmten Bedingungen nicht funktioniert
Welche Bedingungen wären das? Gibt es da Infos? Für meinen Fall trifft das hoffentlich nicht zu.
Auf jeden Fall konnte ich den Code jetzt schon ein wenig kürzen.
Vorher:
$ToolButtonText[0] = _GUICtrlToolbar_AddString($g_hToolbar, ($sprachID = "de") ? "Datei öffnen" : "Open File") ; Text für Öffnen-Schaltfläche
$ToolButtonText[1] = _GUICtrlToolbar_AddString($g_hToolbar, ($sprachID = "de") ? "Ordner zuklappen" : "Order up") ; Text für Zuklappen-Schaltfläche
$ToolButtonText[2] = _GUICtrlToolbar_AddString($g_hToolbar, ($sprachID = "de") ? "Ordner aufklappen" : "Order down") ; Text für Aufklappen-Schaltfläche
$ToolButtonText[3] = _GUICtrlToolbar_AddString($g_hToolbar, ($sprachID = "de") ? "Zurück" : "Back") ; Text für Zurück-Schaltfläche
$ToolButtonText[4] = _GUICtrlToolbar_AddString($g_hToolbar, ($sprachID = "de") ? "Vorwärts" : "Forward") ; Text für Vorwärts-Schaltfläche
$ToolButtonText[5] = _GUICtrlToolbar_AddString($g_hToolbar, ($sprachID = "de") ? "Laden abbrechen" : "Stop") ; ; Text für Abbrechen-Schaltfläche
$ToolButtonText[6] = _GUICtrlToolbar_AddString($g_hToolbar, ($sprachID = "de") ? "Beenden" : "Exit") ; Text für Beenden-Schaltfläche
$ToolButtonText[7] = _GUICtrlToolbar_AddString($g_hToolbar, ($sprachID = "de") ? "Neu laden" : "Refresh") ; Text für Refresh-Schaltfläche
$ToolButtonText[8] = _GUICtrlToolbar_AddString($g_hToolbar, ($sprachID = "de") ? "Hilfe" : "Help") ; Text für Hilfe-Schaltfläche
$ToolButtonText[9] = _GUICtrlToolbar_AddString($g_hToolbar, ($sprachID = "de") ? "Einstellungen" : "Settings") ; Text für Einstellungen
Nachher:
Ich meine es ging darum, das man manchmal den ternären Operator in () setzen muss aber wann/warum und ob das mittlerweile gefixt ist, weiß ich nicht mehr.
Ein Beispiel was ich auf die schnele gefunden habe aber schon sehr alt ist: https://www.autoitscript.com/f…not-working-in-some-ways/
War einer der Gründe warum ich bei If..Then..else geblieben bin (wobei bei mir oft auch mehr als die pure Rückgabe eines Wertes gemacht werden muss).
Wie gesagt, kann mich auch falsch erinnern und so lange es bei dir klappt ist doch super.
und so lange es bei dir klappt ist doch super
Das wird sich zeigen.
Ich habe noch mehr Code einkürzen können (den zum Erstellen der Toolbar-Button)
Vorher:
_GUICtrlToolbar_AddButton($g_hToolbar, $e_idOpen, 0, $ToolButtonText[0]) ; Öffnen-Schaltfläche (1)
_GUICtrlToolbar_AddButtonSep($g_hToolbar) ; Menüseparator 1
_GUICtrlToolbar_AddButton($g_hToolbar, $e_idZu, 1, $ToolButtonText[1]) ; Verzeichnisbaum einklappen
_GUICtrlToolbar_AddButton($g_hToolbar, $e_idAuf, 2, $ToolButtonText[2]) ; Verzeichnisbaum Zuklappen
_GUICtrlToolbar_AddButtonSep($g_hToolbar) ; Menüseparator 2
_GUICtrlToolbar_AddButton($g_hToolbar, $e_idBack, 3, $ToolButtonText[3]) ; Eine Seite zurück
_GUICtrlToolbar_AddButton($g_hToolbar, $e_idForward, 4, $ToolButtonText[4]) ; Eine Seite vor
_GUICtrlToolbar_AddButton($g_hToolbar, $e_idRefresh, 5, $ToolButtonText[5]) ; Aktuelle Seite neu laden
_GUICtrlToolbar_AddButton($g_hToolbar, $e_idStop, 6, $ToolButtonText[6]) ; Seite laden abbrechen
_GUICtrlToolbar_AddButtonSep($g_hToolbar) ; Menüseparator 3
_GUICtrlToolbar_AddButton($g_hToolbar, $e_idSettings, 7, $ToolButtonText[7]) ; Hilfe aufrufen
_GUICtrlToolbar_AddButton($g_hToolbar, $e_idHilfe, 8, $ToolButtonText[8]) ; Hilfe aufrufen
_GUICtrlToolbar_AddButton($g_hToolbar, $e_idNew, 9, $ToolButtonText[9]) ;Programm beenden
Alles anzeigen
Nachher:
For $iButtonCount = 0 To 9
If $iButtonCount = 1 Or $iButtonCount = 3 Or $iButtonCount = 7 Then _GUICtrlToolbar_AddButtonSep($g_hToolbar)
_GUICtrlToolbar_AddButton($g_hToolbar, $iButtonCount + 1000, $iButtonCount, $ToolButtonText[$iButtonCount])
Next
Aber da sieht man man wieder, das Quellcode aus dem Internet nicht immer den eigenen Wünschen entsprechen muss (Ob das Einkürzen sinnvoll ist oder nicht, steht auf einem anderen Blatt).