Beiträge von alpines

Statement zur DSGVO im Forum

Alles zur DSGVO und zur Umsetzung im Forum hier: Statement zur DSGVO (letztes Update: 30.05.2018)

    Nun, es gibt bestimmt eine Möglichkeit die nicht mal ins Array zu lassen aber, da sie immer als Index 1 und 2 auftauchen kannst (einfach prüfen ob 1 = "." und 2 = ".." du sie einfach ArrayDeleten.

    Dann aber nicht vergessen die Anzahl in Index 0 zu reduzieren (oder gleich mitlöschen, schließlich gibt es ja UBound).

    Der Performancegewinn ist so gut wie zu vernachlässigen da du bestimmt nicht das letzte bisschen an Geschwindigkeit rauskitzeln willst.

    Du veränderst den Inhalt der Variablen nicht also kannst du Const verwenden, allerdings wirst du bei Local Const kein Static setzen können, macht ja auch sinn.


    Ich würde hier die Variante nehmen die sich schöner liest. Wenn der Wert sich nicht verändert: Local Const $I_SHORT_LOOP = 3000 / $iShortSleep.

    Du kannst es auch als Local Static deklarieren, und es wäre wohl "schneller", aber der Geschwindigkeitsschub ist infinitesimal klein.

    Ich möchte dabei aber sicher gehen, das nicht die Systempartition erwischt wird und brauche daher die Zahl aus der Datenträgerverwaltung der "nicht Systempartition".

    Lies doch dich Ausgabe von diskpart mit StdOutRead (oder stream es in eine Datei und lies die aus)?

    Mit RegEx solltest du auch schnell an das Ergebnis kommen.

    Wenn ich an der Funktion die von dir beschriebenen "Script-Breaking Changes" durchführe, schiesse ich mir als Ersteller einer Programmiersprache permanent ins Knie!


    Beispiel Funktion(), da könnte ich haufenweise Änderungen und "Script-Breaking Changes" dranhängen, ich könnte aber auch Funktion1(), Funktion2(), FunktionXX(), FunktionYY() uswusf erstellen, mit individuellen, "weiterentwickelten" Eigenschaften. Wer bin ich denn als Programmiersprachenersteller, einem "Programmierer" vorschreiben zu wollen, was er letztendlich zu tun und zu lassen hat?!

    Was mache ich denn als Programmierer, wenn der Programmiersprachenersteller GENAU DIE Funktion, deren Ergebnis ich GENAU SO haben wollte, einfach ändert?!

    Nein, mir persönlich ging es darum, dass man einfach mit der Zeit dazu lernt und an einem Punkt ankommt wo man einige Sachen einfach ändern sollte, da man sie nicht vorausplanen konnte.

    Und das nicht permanent mit jeder Version sondern auf einen Schlag und dann ist erstmal Ruhe, dann muss auch nicht permanent was geändert werden sondern nur einmal.

    Abwärtskompatibilität ist natürlich immer eine feine Sache aber irgendwann vermengt sich das ganze und man muss sich halt fragen, ob es sich lohnt 40 Jahre alten Programmcode mitzuschleifen den man durch effizientere Implementationen ersetzen könnte. Auch wenn man die neue Implementation nehmen kann und die alte drinlässt, es bläht sich doch nur alles auf.


    In AutoIt würde ich z.B. GUISetState ändern, weil mir das zu inkonsequent ist die Flags vor der GUI zu setzen (auch wenn AutoIt für eine GUI gedacht war) und das ist nur die Spitze des Eisberges.

    Würde man immer Funktion1 Funktion2 Funktion3 nehmen, so macht man das ganze, meiner Meinung nach, nur schlimmer weil man nur Symptome bekämpft aber nicht das Problem.


    Inwiefern man nun die ursprüngliche Funktion ändert oder neue hinzufügt ist sicherlich von Fall zu Fall unterschiedlich, ich denke da sind wir uns beide einig.

    Aber, dass eine Sprache konsequent ihre Parameter benennen sollte (sowie ihre Reihenfolge) und die selben Typen in ähnlichen Funktionen erwartet sollte doch wohl auf der Hand liegen.

    Das ist es was mir bei AutoIt solche Kopfschmerzen bereitet.

    Ich meinte im Quellcode...


    Aber so wird das ganze nichts werden, ich kann dir nicht ständig Infos aus der Nase ziehen, versuch doch mal den aktuellen Quellcode zu posten bevor das Fenster offen ist und nachdem es offen ist.

    Den Quellcode musst du im IE aus dem DOM-Explorer auslesen! Rechtsklick > Quellcode anzeigen zeigt den ursprünglichen Code ohne jegliche JS-Aktion an!

    Bis dahin kann ich dir wirklich weiterhelfen.


    Sensible Daten kannst du ja zensieren (nicht streichen, zensieren!)

    Generell empfiehlt es sich hier nicht _ArrayInsert zu verwenden sondern lieber einmal das Array zu resizen (du kannst ja vorher errechnen wie groß es wird) und dann es zu befüllen.

    Die Erweiterung eines Arrays kostet immer Zeit die du dir einsparen kannst.

    Weißt Du , warum bei einer For-Schleife der Ausdruck in der For-Schleife nicht aktualisiert wird, während bei einer While-Schleife der Ausdruck bei jedem Durchlauf aktualisiert wird?

    So sind For-Schleifen nun mal in AutoIt implementiert worden. In C# wird die Bedingung bei jeder Schleifeniteration anfänglich überprüft in AutoIt nur einmal.

    While-Schleifen evaluieren hingegen immer bei jeder Iteration, wäre das nicht möglich (ebenso wie bei Do-Until), dann wäre AutoIt eine totale Sprache die bei jeder Eingabe hält (wenn man mal von Ausführung anderer Skript absieht).


    Array rückwärts - bei mir tritt ein kleiner Fehler auf. Bei Dir auch?

    Das kann sein, ich habe mir ehrlich gesagt auch nicht viel Mühe gegeben da es hier ja nur um Proof-Of-Concept geht.

    Wenn man da den Index und die Eingaben für _ArrayInsert anpasst kriegt man sicherlich, auch dadrunter ein "Test 440".


    Hätte man _ArrayInsert vernünftig implementiert, hätte man sich auch _ArrayAdd komplett sparen können, als Sonderfall muss man halt _ArrayAdd statt _ArrayInsert verwenden.

    Rückwärts durchlaufen funktioniert übrigens auch bei anderen Problemen.


    Beispiel: Ich will ein Array durchgehen und jedes Element löschen welches eine bestimmte Voraussetzung erfüllt,

    dann durchlaufe ich das Array von hinten nach vorne, da die Elementindizes nach vorne hin konsistent bleiben.

    Lösche ich von vorne nach hinten, so verkleinert sich die Größe meines Arrays und ich gehe Out Of Bounds mit meinem For-Header.


    Das ist ein sehr toller Trick den man sich auf jeden Fall merken sollte.

    Das liegt daran, dass du anfänglich nur einmal die Größe des Arrays holst.

    Anschließend fügst du immer mehr Elemente ein aber die ursprüngliche Grenze bleibt ja, deshalb läuft es auch nur bis 220 da du 440 Zeilen hast (und du immer einen Index überspringst, deshalb nur die Hälfte).


    Also entweder eine While-Schleife nehmen oder du gehst das ganze von hinten durch, dann bleiben die Arrayindizes nämlich nach vornehin konsistent.


    Und noch als kleiner Tipp nebenbei:

    AutoIt
    1. _ArrayInsert ( $aFile, $i + 1, "Test " & StringRight ( $aFile[$i] , StringLen ( $aFile[$i] ) -8 ) )
    2. ;oder
    3. ($aFile[$i])


    Bitte nicht so einen Code schreiben, wenn es vom Interpreter nicht ausdrücklich verlangt wird (ab und zu muss man ($aFile[$i]) nutzen), dann die überflüssigen Klammern weglassen und statt

    StringRight und StringLen lieber StringTrimLeft nehmen, StringTrimLeft($aFile[$i], 8) erledigt dasselbe und ist wesentlich kürzer.

    Du hast vergessen den Forschleifenzähler $i um eins zu erhöhen wenn du _ArrayInsert nutzt. Wenn du nämlich hinter dem aktuellen Element einfügst musst du das ja praktisch überspringen.

    So klappts:


    Kannst du deinen Code besser formatiert hochladen? TimerInit gibt kein Handle zurück sondern einen internen Timestamp der nicht standardtisiert ist.

    Die Hilfe warnt davor ihn für andere Zwecke zu "missbrauchen" da das zu Fehlern führen kann.