Beiträge von HansJ54

    Mal wieder ein Spezialproblem von mir:

    Wir nutzen ChromeDriver.exe, befindet sich in einem Netzpfad. Wenn es eine neue Version gibt, kopiere ich sie dorthin. Falls aber gerade jemand die Datei nutzt, geht das schief und ich lande in einer Windows-Fehlermeldung.

    Gibt es in AutoIt eine Möglichkeit zu prüfen, ob ich eine Datei überschreiben kann, also ob sie nicht benutzt ist, ohne dass ich auf die Windows-Ebene zurückfalle?

    Das Ergebnis von $sOk = FileRead("I:\BlpMenu\Webdriver\chromedriver.exe", 1) scheint eine Lösung zu sein, aber gibt es eine bessere Idee (wobei mir die schon gut vorkommt)?


    AspirinJunkie : Aber nicht im Urlaub stören lassen, hat Zeit und mit Workaround gelöst!

    _ArrayMinMax() hat keinen Range, den man für die Untersuchung angeben kann (z.B. Zeile 2-9 + Spalte 2-4)?


    Kann man einem neuen Array direkt einen Range aus einem bestehenden Array zuweisen? Also $aB = (Zeile 2-9 und Spalte 2-4) aus Array $aA? Habe mal wieder nichts gefunden. Mein Workaround: ich kopiere das Array komplett und lösche die nicht gewünschten Zeilen und Spalten anschließend.


    Ich sollte mal schneller hier reinschauen, bei mir sind es bisher mehr als 30 Zeilen Code und AspirinJunkie macht das mit 5 8)

    Es funktioniert einwandfrei für meine Fälle, allerdings vom Verstehen bin ich ganz weit entfernt. :Face:


    AspirinJunkie Im Beispiel unten gibt es ein Problem mit der Sortierung der "Release #nn" - da klappt die Sortierung (#29 vor #2) nicht - für mich nicht wichtig, kommt bei mir nicht vor.

    Und: Deine ArrayPlus-UDF ist super, Einiges kann ich auch benutzen weil ich es verstehe, aber z.B. für das Beispiel unten nur das Maximum oder die Zeile des Maximums zu ermitteln dazu reicht es bei mir nicht. Ebenfalls kein großes Problem, da ich mit der Sortierung das Ergebnis auch bekomme, aber vielleicht gibt es ja auch die entsprechende direkte Funktion bei Dir? Und ist "Array-Plus-UDF" der Nachfolger von "DynArray"?


    Nochmals vielen Dank an alle hier im Forum!



    Moombas : Zeile 15 - IniReadSectionNames ist eine vorhandene Funktion und liefert schon einen @error. Der Fehler lag in meiner IniGetAllKeys, da muss auch noch eine Errorbearbeitung hin. Falls die Ini-Datei $sIni nicht vorhanden ist, dann braucht es m.E. insgesamt 4 "If @error then". Bitte mal meine Logik prüfen.


    Versionsnummern sortieren: da denke ich gerade drüber nach, kommt ;)


    Zeile 12: gute Idee

    Zeile 15: wenn etwas nicht passt (Filename oder Inhalt), dann sollte abgebrochen werden. Normalerweise sind die Daten ja nicht eingebettet, ich schreibe die z.B. regelmäßig von den Clients aus in eine gemeinsame Ini-Datei.

    Zeile 19: sehr gut, hatte auch mal testweise eine Sektion "1234" probiert, führte zum Error. Habe aber nicht sofort verstanden warum - jetzt ist es mir klar. Daher konnte ich die Anzahl in Zeile 54 auch nicht setzen und musste oben UBound nutzen.


    Bei Sortieren ergibt sich noch ein Problem mit den Versionen. Hat jetzt nicht mit der Funktion allgemein zu tun, sondern nur mit meiner Anwendung. Aber vielleicht gibt es da ja auch schon eine Lösung für die Sortierung von Versionsnummern? 99.0.1234.741 würde jetzt fälschlich als "neuer" eingeordnet als 105.0.1234.102.


    Andy: Projekt erfolgreich abgeschlossen, die Überschrift des Threads passt?

    Hier sind jetzt die fertigen beiden Funktionen, die ich aus den Beispielen oben dank Eurer Hilfe zusammengesetzt habe. Dazu ein noch ein Beispiel für die Anwendung. Fehler und Verbesserungen bitte melden ;)


    IniGetAllKeys() erzeugt eine Tabelle mit allen vorhandenen Keys in einer ini-Datei

    Ini2Array() erzeugt ein Array aus allen Werten einer ini-Datei mit Zeilenbeschriftung "Sections" und Spaltentext "Keys" oder das ganze transponiert.


    :rofl:

    Bei mir ist es genau umgekehrt. Ich versuche (meist ohne Erfolg) die automatische Updatefunktion dauerhaft zu deaktivieren. Ursache: Viele Updates verschlimmbessern das Programm, da warte ich lieber ab, bis die durch das Update hervorgerufenen Probleme behoben sind.

    Windows-Updates warte ich auch ein wenig, aber Browser-Updates hätte ich gerne sofort bei unseren Rechnern. Da ist es egal, wenn mal einer Probleme macht - gibt ja genügend verschiedene.


    Kann man beim _ArrayDisplay() neben den Rows auch noch die Titel "Cols" ausblenden? Habe nichts gefunden.

    Moin,


    hier mal eine Variante mit gezielter Schlüsselauswahl. Damit können die Sektionen unterschiedliche Schlüssel in beliebiger Reihenfolge enthalten.

    Funktioniert auch super, wobei ich in der neuen Version die Schlüssel nicht fest vergebe, sondern vorab alle vorhandenen Keys auslese. Habe noch "Sortieren" eingefügt und eine Zeile zur Anzeige des neuesten Softwarestands aus der Liste. Lässt sich sicher noch optimieren ;)



    HansJ54 Probier nochmal bitte, habs mal oben angepasst.

    Perfekt, sowohl bei vollständigen 4 Einträgen pro Sektion wie auch bei fehlenden Einträgen:



    Und auch bei fehlenden Einträgen passt es:



    Und selbst wild gemischt in der Reihenfolge bei den einzelnen Sektionen funktioniert es:



    Und mit einem abschließenden _ArrayTranspose() ist es für meine Zwecke optimal (es können schon mal knapp 20 PCs sein und die stehen besser untereinander, Versions sind es momentan nur 6).



    Vielen Dank, spart mir heute Abend die zusätzliche Arbeit.


    Ein wenig Hintergrund, warum ich das mache:

    wir schaffen es nicht, dass sich auf allen Rechnern die Browser automatisch aktualisieren sobald ein Update vorliegt. Für Chrome und Edge habe ich als Workaround die Startseiten chrome://settings/help bzw. edge://settings/help eingestellt, so dass sich beim Start immer automatisch die Updates installieren. Für Firefox habe ich noch keinen Workaround gefunden. Wobei überall wo möglich "Updates automatisch installieren" eingestellt ist - funktioniert einfach nicht. Falls jemand dazu eine Idee hat: her damit!

    Eine fertige Funktion gibt es dafür nicht.

    Ich würde es so machen

    Funktioniert für meine Zwecke perfekt, vielen Dank. Allerdings nur, da ich in jeder Sektion immer genau 4 Einträge habe. Die Spaltenüberschriften kann man daher auch innerhalb der Schleife bei $i = 1 setzen.

    Andy: Wenn ich mal ein wenig Zeit habe, dann versuche ich es mal auf "allgemein" umzuschreiben mit unterschiedlich vielen Einträgen pro Sektion.

    Ich habe mal wieder mindestens 10 Minuten gesucht und einige alte Beispiele gefunden, habe aber Probleme damit, laufen teilweise nicht (z.B. von Nuts aus 2018).


    Ich habe eine ini-Datei wie folgt:


    [BLP1-WX]

    ChromeVersion=104.0.5112.102

    FirefoxVersion=103.0.2.8255

    EdgeVersion=104.0.1293.63

    OfficeVersion=16.0.10389.20033

    [BLP2-WX]

    ChromeVersion=104.0.5112.102

    FirefoxVersion=103.0.2.8255

    EdgeVersion=104.0.1293.63

    OfficeVersion=16.0.10389.20033

    [BLP3-WX]

    ChromeVersion=104.0.5112.102

    FirefoxVersion=103.0.2.8255

    EdgeVersion=104.0.1293.63

    OfficeVersion=16.0.10389.20033

    [BLP4-WX]

    ...


    und möchte die "lesbar" in einem einfachen 2D-Array anzeigen:

    Spaltenüberschriften:

    PC ChromeVersion FirefoxVersion EdgeVersion OfficeVersion

    Zeilen:

    BLPx-WX und dahinter die 4 Softwareversionen des jeweiligen PCs


    Könnte ich mir mit ein paar Schleifen zurechtbasteln, aber dafür gibt es doch sicher schon was Fertiges wie _FileReadIniToArray() ? ;)


    Vielen Dank!

    Zuerst habe ich in der Hilfe nachgeschaut unter "Function Reference" / "String Management" und übersehen, dass es noch mehr String-Funktionen gibt unter "User Defined Functions Reference". Das ist zu tief unten in der Liste :ironie:

    Und bei Google muss man erstaunlich genau treffen, der findet doch sonst auch allen möglichen Kram auch wenn man nicht exakt sucht.

    Schönes Wochenende zusammen!

    Diesmal im Forum und bei Google gesucht und wieder nichts gefunden, obwohl in anderen Programmiersprachen Standard (bin dabei meine Scripte ein wenig zu durchforsten):


    Ich suche eine Funktion, mit der ich n mal die Zeichenfolge "$sText" erzeugen kann. Mit einer For-Schleife ist das einfach, aber gibt es keine direkte Funktion in AutoIt? Oder vielleicht irgendetwas mit RegEx (wovon ich sehr wenig Ahnung habe)?


    _StringDup(10, "x") => "xxxxxxxxxx" oder

    _StringDup(7, "xy") => "xyxyxyxyxyxyxy"