Ini2Array() : Ini-Datei in Array einlesen + IniGetAllKeys() : Array mit allen vorkommenden Keys einer Ini-Datei erzeugen

  • 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!

  • Eine fertige Funktion gibt es dafür nicht.

    Ich würde es so machen

  • Hi,

    aber dafür gibt es doch sicher schon was Fertiges wie _FileReadIniToArray() ?

    Falls es so etwas nicht geben sollte, schreib die Funktion selbst, stell sie hier im Thread ein, ändere die Überschrift so, dass der Funktionsname enthalten ist, und alle anderen, welche solch eine Funktion suchen, finden diese auf Anhieb!

  • Mars

    Hat den Titel des Themas von „Ini_Datei in Aray einlesen“ zu „Ini-Datei in Array einlesen“ geändert.
  • 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.

  • Wie wäre es damit? HansJ54

  • Moin,


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


  • 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!

  • 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 ;)



  • Wobei überall wo möglich "Updates automatisch installieren" eingestellt ist - funktioniert einfach nicht.

    :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.

  • :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.

  • BugFix : Ging mir auch so, mittlerweile sind aber so viele Web-Anwendungen am Laufen, die eine aktuelle Version erfordern, das es besser ist auf der neuesten zu bleiben (bezüglich der Browser, Windows etc. ist wieder eine andere Sache).


    HansJ54 : Nicht das ich wüsste, dann müsstes du dir dafür eine eigene kleine GUI bauen aber da kann ich nicht bei helfen. AutoIt GUI und ich mögen uns nicht besonders :D.

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

    Nein, ausblenden kann man 'Cols' nicht, es gibt kein Flag wie bei den Rows ($ARRAYDISPLAY_NOROW).

    Du kannst die Spaltenüberschriften aber selbst festlegen, siehe Parameter 6 ($sHeader) aus der Hilfe zu _ArrayDisplay .


    EDIT : Beispiel

    AutoIt
    #include <Array.au3>
    Local $aArray[4][2] = [["Zeile1/Spalte1", "Zeile1/Spalte2"], ["Zeile2/Spalte1", "Zeile2/Spalte2"], ["Zeile3/Spalte1", "Zeile3/Spalte2"], ["Zeile4/Spalte1", "Zeile4/Spalte2"] ]
    _ArrayDisplay($aArray, "Testarray :", default, 64, default, " | ")
    _ArrayDisplay($aArray, "Testarray :", default, 64, default, "Spalte 1 | Spalte 2")


    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    Einmal editiert, zuletzt von Musashi () aus folgendem Grund: typo

  • 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.


  • HansJ54

    Hat den Titel des Themas von „Ini-Datei in Array einlesen“ zu „Ini2Array() : Ini-Datei in Array einlesen + IniGetAllKeys() : Array mit allen vorkommenden Keys einer Ini-Datei erzeugen“ geändert.
  • HansJ54 : Für mich sieht Zeile 38 falsch aus. $aSectionNames[0] - 1

    In dem Feld $aSectionNames[0] sollte bereits die richtige Anzahl stehen, da dies somit kein 0-basiertes Array mehr ist, sondern ein 1-basiertes, geht das Array von 1 bis zur Zahl in [0]


    Edit: Grad getestet und du bekommst zwar die Spalte mit Überschrift aber liest deren Daten nicht ein, bedeutet die -1 hier muss weg