1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. HansJ54

Beiträge von HansJ54

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

    • HansJ54
    • 24. August 2022 um 13:19
    Zitat von Musashi

    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 .

    Code
    _ArrayDisplay($aErgebnis, "Browser- und WebDriver-Versionen", "1:", $ARRAYDISPLAY_NOROW + $ARRAYDISPLAY_COLALIGNCENTER, Default, _ArrayToString($aErgebnis, "|", 0, 0))

    pasted-from-clipboard.png

    Super, perfekte Unterstützung hier! AutoIt hat so viele Feinheiten, dass man manchmal den Wald vor lauter Bäumen nicht sieht. Hatte diese Titel-Funktion bei _ArrayDisplay() noch nie benutzt.

    Noch eine Frage aber ziemlich unwichtig: kann man die leere Zeile und Spalte unten und rechts noch wegbekommen?

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

    • HansJ54
    • 23. August 2022 um 20:38
    Zitat von BugFix

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

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

    • HansJ54
    • 23. August 2022 um 15:50
    Zitat von Velted

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

    Code
    #include <Array.au3>
    Global $sIniDatei = @ScriptFullPath
    Global $aErgebnis = Ini2Array($sIniDatei, True, True) ; sort sections and keys
    $aErgebnis[0][0] = "Client"
    Local $aRowLatest = _ArrayFindAll($aErgebnis, "Latest") ; row for latest version
    For $i = 1 To UBound($aErgebnis, $UBOUND_COLUMNS) - 1
        $aErgebnis[$aRowLatest[0]][$i] = _ArrayMax($aErgebnis, 0, 1, $aRowLatest[0], $i)
    Next
    _ArrayDisplay($aErgebnis, "Browser- und WebDriver-Versionen", "", $ARRAYDISPLAY_NOROW)
    
    Func Ini2Array($sIni, $bSortSections, $bSortKeys)
        Local $aKeys = IniGetAllKeys($sIni)
        If $bSortKeys Then _ArraySort($aKeys)
        Local $aSectionNames = IniReadSectionNames($sIni)
           If $bSortSections Then _ArraySort($aSectionNames)
        If @error Then Return SetError(@error, 0, 0)
        Local $aResult[UBound($aSectionNames)][UBound($aKeys)]
        Local $iMax = UBound($aKeys) - 1
        For $I = 0 To $iMax
            $aResult[0][$I] = $aKeys[$I]
        Next
        Local $sSection
        For $I = 1 To $aSectionNames[0]
            $sSection = $aSectionNames[$I]
            $aResult[$I][0] = $sSection
            For $J = 1 To $iMax
                $aResult[$I][$J] = IniRead($sIni, $sSection, $aKeys[$J], "---")
            Next
        Next
        Return $aResult
    Endfunc
    
    Func IniGetAllKeys($sIni)
        Local $aKeys[0]
        Local $sData = "|"
        Local $aSections = IniReadSectionNames($sIni)
        For $i = 1 To $aSections[0]
            Local $aInhalt = IniReadSection($sIni, $aSections[$i])
            If @error = 0 Then
                For $j = 1 To $aInhalt[0][0]
                    If Not StringInStr($sData, "|" & $aInhalt[$j][0] & "|") Then $sData &= $aInhalt[$j][0] & "|"
                Next
            EndIf
        Next
        If StringRight($sData, 1) = "|" Then $sData = StringTrimRight($sData, 1)
        _ArrayAdd($aKeys, $sData)
        Return $aKeys
    EndFunc
    
    #Region eingebettete INI
    #cs
    [Latest]
    [BLP1-WX]
    EdgeVersion=105.0.1293.63
    FirefoxVersion=103.0.3.8255
    ChromeVersion=105.0.5112.102
    OfficeVersion=16.0.10389.20033
    [BLP3-WX]
    ChromeVersion=104.0.5112.102
    EdgeVersion=104.0.1293.63
    FirefoxVersion=103.0.2.8255
    OfficeVersion=16.0.10389.20033
    [BLP2-WX]
    EdgeVersion=104.0.1293.63
    ChromeVersion=104.0.5112.102
    FirefoxVersion=103.0.2.8255
    OfficeVersion=16.0.10389.20033
    [BLP4-WX]
    ChromeVersion=104.0.5112.102
    EdgeVersion=105.0.1293.63
    FirefoxVersion=104.0.2.8255
    OfficeVersion=16.0.10389.20033
    [BLP5-WX]
    ChromeVersion=104.0.5112.102
    EdgeVersion=104.0.1293.63
    FirefoxVersion=103.0.2.8255
    OfficeVersion=16.0.10389.20033
    [BLP6-WX]
    ChromeVersion=104.0.5112.102
    EdgeVersion=104.0.1293.63
    FirefoxVersion=103.0.2.8255
    OfficeVersion=16.0.10389.20033
    [WebDriver]
    ChromeVersion=104.0.5112.79
    EdgeVersion=104.0.1293.63
    FirefoxVersion=0.31.1
    #ce
    #EndRegion eingebettete INI
    Alles anzeigen

    pasted-from-clipboard.png

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

    • HansJ54
    • 23. August 2022 um 12:14
    Zitat von Moombas

    HansJ54 Probier nochmal bitte, habs mal oben angepasst.

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

    pasted-from-clipboard.png

    Und auch bei fehlenden Einträgen passt es:

    pasted-from-clipboard.png

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

    pasted-from-clipboard.png

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

    pasted-from-clipboard.png

    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!

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

    • HansJ54
    • 23. August 2022 um 11:41
    Zitat von Moombas

    pasted-from-clipboard.pngWie wäre es damit? HansJ54

    Auch nicht schlecht, aber für meine Zwecke sollte man die Werte der ersten Spalte zusammenführen ;) Aber da arbeite ich gerade dran, heute nach Feierabend geht's weiter.

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

    • HansJ54
    • 22. August 2022 um 20:07
    Zitat von Tweaky

    Eine fertige Funktion gibt es dafür nicht.

    Ich würde es so machen

    AutoIt
    #Region    ;************ Includes ************
    #include <Array.au3>
    #EndRegion ;************ Includes ************
    
    Global $aErgebnis[1][5]
    
    $sDatei = "D:\test.ini"
    
    $aSektions = IniReadSectionNames($sDatei)
    
    For $i = 1 To UBound($aSektions) - 1
        $aInhalt = IniReadSection($sDatei, $aSektions[$i])
    ;   Spaltenüberschriften
        If $i = 1 Then _ArrayAdd($aErgebnis, "PC" & "|" & $aInhalt[1][0] & "|" & $aInhalt[2][0] & "|" & $aInhalt[3][0] & "|" & $aInhalt[4][0])
        _ArrayAdd($aErgebnis, $aSektions[$i] & "|" & $aInhalt[1][1] & "|" & $aInhalt[2][1] & "|" & $aInhalt[3][1] & "|" & $aInhalt[4][1])
    Next
    
    _ArrayDisplay($aErgebnis)
    Alles anzeigen

    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.

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

    • HansJ54
    • 21. August 2022 um 19:55

    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!

  • String vervielfachen

    • HansJ54
    • 22. Juli 2022 um 21:06

    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!

  • String vervielfachen

    • HansJ54
    • 22. Juli 2022 um 19:08

    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"

  • Array Sortieren nach Länge der Texte

    • HansJ54
    • 22. Juli 2022 um 15:36
    Zitat von Musashi

    Die forumsinterne Suchfunktion kann man weitgehend vergessen. Wenn Du

    Autoit Strings sortieren nach Länge , z.B. bei Google, eingibst, dann ist Oscar's Beitrag Treffer 1 :) .

    Muss ich mir merken ;)

  • Array Sortieren nach Länge der Texte

    • HansJ54
    • 22. Juli 2022 um 14:51

    Danke, perfekte Lösung!

    Ich habe tatsächlich aber vorher im Forum gesucht und nichts gefunden ?(

    Selbst mit "strings nach länge sortieren" kommt nur dieser mein Thread.

  • Array Sortieren nach Länge der Texte

    • HansJ54
    • 22. Juli 2022 um 13:11

    Ich möchte ein eindimensionales Array mit Texten nach der Länge der Texte sortieren, längster Text zuerst. Das bekomme ich irgendwie hin, aber vielleicht hat jemand schon so etwas gemacht?

  • _ArrayDisplay(): bestimmte nicht nebeneinanderliegende Spalten anzeigen mit $sArrayRange

    • HansJ54
    • 8. Juni 2022 um 09:49

    Das ist logisch, aber ich hätte an so etwas wie Max($LVSCW_AUTOSIZE, $iMinSize) gedacht. Was aber nicht geht da $LVSCW_AUTOSIZE = -1. Ist kein wirkliches Problem, nur Weiterbildung ;)

  • _ArrayDisplay(): bestimmte nicht nebeneinanderliegende Spalten anzeigen mit $sArrayRange

    • HansJ54
    • 7. Juni 2022 um 20:11

    Noch eine Frage an Oscar - klappt auch so einwandfrei, aber in einigen Fällen sieht man etwas zu wenig in bestimmten Spalten (genauer gesagt, in der 2. Spalte):

    _GUICtrlListView_SetColumnWidth($__g_idArrayShow2D_LV, $iCol, $LVSCW_AUTOSIZE)

    Damit wird anscheinend automatisch die Spaltenbreite gesetzt, richtig? Was muss ich ändern, um da noch eine minimale Spaltenbreite vorzugeben? Brauche ich nur, wenn überhaupt, für die 2. Spalte - also nicht unbedingt als unterschiedliche Vorgabe für alle Spalten. Oder halt 1 Wert für alle Spalten.

  • _ArrayDisplay(): bestimmte nicht nebeneinanderliegende Spalten anzeigen mit $sArrayRange

    • HansJ54
    • 7. Juni 2022 um 20:06

    Nein, das bin ich nicht ;)

  • _ArrayDisplay(): bestimmte nicht nebeneinanderliegende Spalten anzeigen mit $sArrayRange

    • HansJ54
    • 2. Juni 2022 um 20:36

    Ich würde Dich gerne zu einem Glas Bier (oder auch 2) einladen!

  • _ArrayDisplay(): bestimmte nicht nebeneinanderliegende Spalten anzeigen mit $sArrayRange

    • HansJ54
    • 2. Juni 2022 um 14:40

    Vielen Dank noch mal für die Hilfe, funktioniert ebenfalls perfekt!

    Da ich es auf die Schnelle nicht komplett verstanden habe, wo die Problematik liegt (und wenn ich nicht zu viel Aufwand verursache) ;)

    Könnte man das Copy to Clipboard auch auf ein einzelnes angeklicktes Feld beschränken? Es ist oft eine Vertragsnummer oder eine Telefonnummer, die rauskopiert werden soll, nicht die ganze Zeile. Das allein hilft natürlich auch schon, da man ja den nicht benötigten Rest rauslöschen kann, aber vielleicht gibt es ja eine Erweiterung von Zeile auf Feld?

  • _ArrayDisplay(): bestimmte nicht nebeneinanderliegende Spalten anzeigen mit $sArrayRange

    • HansJ54
    • 1. Juni 2022 um 20:12

    Das ist die wirklich optimale Lösung, danke! :)

    Wenn wir schon mal dabei sind: in einigen Fällen wäre es hilfreich, wenn ich einen Eintrag markieren und kopieren könnte. Das geht mit diesem Beispiel nicht, gibt es da noch eine Möglichkeit?

    Es könnte ja z.B. eine Textanzeige sein, bei der aber die Spalten exakt untereinander stehen müssten.

  • _ArrayDisplay(): bestimmte nicht nebeneinanderliegende Spalten anzeigen mit $sArrayRange

    • HansJ54
    • 21. Mai 2022 um 16:44

    Ich nutze das für verschiedene Tabellen, meistens brauche ich die erste Spalte als Beschriftung und dann irgendeine einzelne andere. Es gibt aber auch Fälle, da sind es 2 oder mehr andere, die nicht unbedingt nebeneinander liegen. Also so, wie es mein Programm mit der Kopie macht: Vorgabe n Spalten, Ausgabe n Spalten.

    Spoiler anzeigen
    Daten:
    KdNr 1234 3421 6543 3422 5334
    Verbindung 1234 3421 6543 3421 5334
    Name Schmitz Müller Schulz Müller Maier
    Vorname Klaus Michael Hans Josefine Josef
    Strasse Hauptstr. Im Grund Weststr. Im Grund Nebenstr.
    Hausnummer 35 6 22b 6 3
    Plz 50000 40000 40000 40000 80000
    Ort Köln Düsseldorf Hamburg Düsseldorf München
    Wahl: 1234
    KdNr 1234
    Verbindung 1234
    Name Schmitz
    Vorname Klaus
    Strasse Hauptstr.
    Hausnummer 35
    Plz 50000
    Ort Köln
    Wahl: 3421 (suche die Nr. in Verbindung)
    KdNr 3421 3422
    Verbindung 3421 3421
    Name Müller Müller
    Vorname Michael Josefine
    Strasse Im Grund Im Grund
    Hausnummer 6 6
    Plz 40000 40000
    Ort Düsseldorf Düsseldorf

    pasted-from-clipboard.png

    Die Suche der Spalten ist übrigens kein Problem, die Vorgabe für das neue ArrayDisplay wäre immer nur so etwas wie : $sCols = "1|3|5|9" - die tatsächlichen Tabellen sind wesentlich komplexer und teilweise über 2. und 3. Tabellen indiziert, also keine Arbeit in die Suche stecken ;)

  • _ArrayDisplay(): bestimmte nicht nebeneinanderliegende Spalten anzeigen mit $sArrayRange

    • HansJ54
    • 21. Mai 2022 um 16:10
    Zitat von Oscar

    wäre es hilfreicher einfach eine eigene ArrayDisplay-Funktion zu schreiben.

    Gibt es dazu irgendwo einen Ansatz, den ich weiterverfolgen kann? Ist nur zur Weiterbildung, eine brauchbare Funktion selbst habe ich ja schon.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™