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

  • ControlSend und weitere Control*: falsche Beschreibung in der Hilfe?

    • HansJ54
    • 25. April 2023 um 18:29

    Danke für die schnelle Info!

    Also wird eine ControlID dabei als ein "Title" interpretiert? Trotzdem wäre es weniger irritierend (für mich), wenn die Reihenfolge im Example der Reihenfolge in der Syntax entsprechen würde.

  • ControlSend und weitere Control*: falsche Beschreibung in der Hilfe?

    • HansJ54
    • 25. April 2023 um 17:57

    Als Syntax wird angegeben

    ControlSend ( "title", "text", controlID, "string" [, flag = 0] ) - ControlID dritter Parameter

    und im Example

    ControlSend ( $hWnd, "", "Edit1", "This is some Text") - ControlID erster Parameter

    Sieht bei allen Control* genau so aus.

    Verstehe ich da was falsch oder sollte die Hilfe korrigiert werden?

  • Teil eines Arrays wie in Excel bearbeiten

    • HansJ54
    • 16. April 2023 um 15:46
    Zitat von AspirinJunkie

    Du verwendest eine ältere Version von AutoIt ohne Maps.

    installiere dir die aktuelle Version von AutoIt.

    Vielen Dank, funktioniert jetzt. :)

    Gibt es eigentlich eine Möglichkeit zu sehen, dass es eine neue Version von AutoIt gibt ohne auf der Webseite nachzuschauen? Manche Programme zeigen das per Popup, bei anderen geht es mit Hilfe und "Über". Da ich bei AutoIt nur in SciTE arbeite, habe ich nicht gemerkt, dass es eine neue Version gab.

  • Teil eines Arrays wie in Excel bearbeiten

    • HansJ54
    • 15. April 2023 um 19:43
    Zitat von Kanashius

    Um eine ListView editierbar zu machen habe ich mal eine UDF geschrieben. Du musst sie quasi nur mit dem Array befüllen und beim "speichern" (deselektieren/enter/...) den Array-Eintrag an dem Index+SubIndex verändern.

    Sollte das sein, was du willst: Listview edit subitems UDF

    Sieht gut aus und ist es vermutlich auch, aber bekomme bei der ListViewEditInput.au3 Fehlermeldung wegen fehlender Functions MapExists() , MapRemove(), MapKeys(). Habe ich vergessen etwas runterzuladen?

  • Teil eines Arrays wie in Excel bearbeiten

    • HansJ54
    • 14. April 2023 um 16:41

    Ich versuche es noch einmal:

    Gegeben ein Array in AutoIt mit 2 Spalten. Das möchte ich anzeigen und durch Anklicken einer Zelle in der 2. Spalte den Wert in dieser Zelle per Tastatur ändern (reiner Text, keine Formeln). So eine Art Array-Editor oder Mini-Excel.

    Das Skript oben produziert die Anzeige, aber ich konnte nicht herausfinden, was umzustellen ist um eine Eingabe zu ermöglichen. Für zukünftige Zwecke könnten es auch mal 3 oder 4 Spalten sein, aber vorerst nicht wichtig.

    Vielleicht hilft das Bild?

    pasted-from-clipboard.png

  • Teil eines Arrays wie in Excel bearbeiten

    • HansJ54
    • 14. April 2023 um 13:17

    Hallo Andy,

    ich dachte, ich hätte mein Problem verständlich genug beschrieben - ich versuche es noch einmal:

    Ziel: aus einem 2D-Array die Spalte 1 (Namen) und wahlweise irgendeine weitere Spalte x anzeigen und einzelne per Maus angeklickte Werte in der Spalte x ändern/eintragen/überschreiben können.

    Interessant übrigens: ich habe gestern von ChatGPT ein Skript bekommen, das zwar nur teilweise funktionierte (war nur ein Viewer und ich konnte die Einträge in der 2. Spalte nicht ändern). Aber zumindest konnte ich sehen, dass die Lösung wohl irgendwie über ListView möglich ist und habe dadurch zumindest einen besseren Suchbegriff und Ansatz.

    Beispiel unten: wenn ich jetzt noch einzelne Werte aus Spalte "Local" anklicken und ändern könnte, wäre ich am Ziel. Vielleicht liegt es $LVN_ENDLABELEDIT - wurde benutzt aber ist unbekannt und ich konnte auch nichts dazu finden. In der Diskussion mit ChatGPT kam dann raus, ich sollte dafür den Wert -177 einsetzen - warum auch immer.

    AutoIt
    #include <Array.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <WindowsConstants.au3>
    #include <WinAPI.au3>
    
    Global $LVN_ENDLABELEDIT = -177 ; DIESE VARIABLE IST UNBEKANNT UND CHATGPT MEINTE, MAN KÖNNTE SIE EINFACH DURCH -177 ERSETZEN
    
    GLOBAL $aMyArray[30][2] = [ _
        ["Check","0000000"], _
        ["Damb21","1312355"], _
        ["Damb19","1312355"], _
        ["Damb4","1342355"], _
        ["Damb11","1372355"], _
        ["Damb2","1312355"], _
        ["Damb14","1310655"], _
        ["Damb4","1312355"], _
        ["Damb13","1312355"], _
        ["Damb2","1312955"], _
        ["Damb214","1312355"], _
        ["Damb114","1312355"], _
        ["Damb13","1312255"], _
        ["Dasb27","1312355"], _
        ["Dasb43","1312355"], _
        ["Dasb4","1312355"], _
        ["Dasb13","1312355"], _
        ["Dasb2","1392355"], _
        ["Dasb214","1312355"], _
        ["Dasb114","1812355"], _
        ["Dasb13","1312355"], _
        ["Dasb27","1312355"], _
        ["Dasb43","1312355"], _
        ["Dasb12","1312355"]]
    
    ; Erstelle das GUI-Fenster
    Global $hGUI = GUICreate("Array Viewer", 600, 400)
    
    ; Erstelle die ListView-Kontrolle
    Global $hListView = GUICtrlCreateListView("Name|Local", 10, 10, 580, 380)
    _GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_DOUBLEBUFFER))
    
    ; Füge die Daten aus dem Array zur ListView-Kontrolle hinzu
    For $i = 0 To UBound($aMyArray) - 1
        GUICtrlCreateListViewItem($aMyArray[$i][0] & "|" & $aMyArray[$i][1], $hListView)
    Next
    
    ; Aktualisiere das Array, wenn der Benutzer Änderungen vornimmt
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    
    GUISetState()
    
    ; Haupt-Loop
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
        EndSwitch
    WEnd
    
    Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg, $wParam
    
        Local $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
        Local $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
        Local $iCode = DllStructGetData($tNMHDR, "Code")
        Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
        Local $iItem = DllStructGetData($tInfo, "Item")
        Local $iSubItem = DllStructGetData($tInfo, "SubItem")
    
        If $hWndFrom = $hListView And $iCode = $LVN_ENDLABELEDIT Then
            Local $tLVITEM = DllStructCreate($tagLVITEM, $lParam)
            Local $sText = DllStructGetData($tLVITEM, "Text")
            $aMyArray[$iItem][$iSubItem] = $sText
            _GUICtrlListView_SetItemText($hListView, $iItem, $iSubItem, $sText)
        EndIf
    
        Return $GUI_RUNDEFMSG
    EndFunc
    Alles anzeigen
  • Teil eines Arrays wie in Excel bearbeiten

    • HansJ54
    • 13. April 2023 um 20:59
    Zitat von BugFix

    Habe meine "Cells.au3" noch mal angeschaut. Grundsätzlich wäre es damit machbar, müsste aber auf jeden Fall stark verändert werden, da in jetziger Form nur das Anzeigen (und bedingte Formatieren) von Werten vorgesehen ist. Aber das auszuschlacken und umzubauen ist sicher komplizierter, als es selbst zu Erstellen.

    Würde es bei Dir unter Meine UDF erwarten, bin aber entweder blind oder Cells.au3 ist nicht da? Nur zum Anschauen.

    Andere Idee: ich habe gerade eine UDF gefunden, mit der man CSV-Dateien bearbeiten kann. Ist nur ziemlich langsam bei großen Dateien. Wenn ich da eine Einschränkung auf die Anzeige von 2 Spalten hinbekäme, würde ich nicht das Array sondern die csv bearbeiten und dann das Array neu laden. https://ttps//www.autoitscr…sv-file-editor/ Leider geht das Script weit über meine Verständnisgrenzen :S

  • Teil eines Arrays wie in Excel bearbeiten

    • HansJ54
    • 13. April 2023 um 19:14

    Es ist eine große csv-Datei, die ich im Programm in ein Array einlese. Gelegentlich muss ich in einer Spalte testweise einige Werte ändern. Bisher verlasse ich das Programm, starte Excel, suche die Spalte, ändere und lese wieder ein und teste. Wenn die Tests erfolgreich waren, dann sollen die Werte in der ursprünglichen csv-Datei bleiben, sonst wieder zurück zum alten Stand.

    Daher ist meine Idee, in einer Spalte im eingelesenen Array einige Werte zu ändern wie mit Excel, also vom AutoIt-Programm aus.

  • Teil eines Arrays wie in Excel bearbeiten

    • HansJ54
    • 13. April 2023 um 18:39

    Danke! Bei mir stehen nur Texte drin, keine Formeln und Formatierungen. Ist vielleicht einfacher.

  • Teil eines Arrays wie in Excel bearbeiten

    • HansJ54
    • 13. April 2023 um 18:23

    Nach langer Zeit ohne Probleme 8) denke ich mal wieder über eine Optimierung nach:

    Ich lese eine große csv-Datei in ein Array ein und möchte im Programm eine Spalte davon anzeigen und bearbeiten - so als ob ich diesen Teil des Arrays alleine in Excel vor mir hätte. Bisher habe ich die Input-Datei mit Excel geöffnet, Spalte gesucht und geändert, Datei gespeichert und die ganze Datei neu im Programm eingelesen.

    In der ersten Spalte stehen die Feldbezeichnungen, daher müsste ich Spalte 1 und Spalte xx anzeigen können, die Werte in Spalte xx ändern und das Ganze wieder speichern.

    Gibt es dafür schon eine fertige Lösung?

    Danke für Eure Hilfe!

  • File in use / Überprüfung

    • HansJ54
    • 21. September 2022 um 13:06

    Super, danke! Besser eine direkte Funktion als "hintenrum" ;)

  • File in use / Überprüfung

    • HansJ54
    • 21. September 2022 um 12:35

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

    pasted-from-clipboard.png

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

    • HansJ54
    • 21. September 2022 um 11:05

    AspirinJunkie

    Vielen Dank für Arrayplus.au3, nutze ich jetzt ausgiebig.

    Frage dazu: ich ziehe mit _ArraySlice($aArray, "[2:6][::1]") einen Zeilenbereich raus, wobei [::1] für "alle Spalten" steht. Ist das der richtige Parameter dafür oder gibt es ein "all"?

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

    • HansJ54
    • 28. August 2022 um 13:07

    Du hast recht mit der Interpretation (außer man schneidet nur am Ende Spalten ab) und _ArraySlice() ist die perfekte Lösung.

    Für mich sind es allerdings sowieso auch nur Zeilen, die erste und ab einer bestimmten Zeile unten soll nicht ausgewertet werden.

    Und so sieht mein Ergebnis aus (Update):

    pasted-from-clipboard.png

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

    • HansJ54
    • 28. August 2022 um 12:24

    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.

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

    • HansJ54
    • 25. August 2022 um 15:09

    Vielen Dank für die Erklärungen.

    Zitat von AspirinJunkie

    So und nun zurück in den Urlaubsmodus und mit den Kindern an die Strandbar... 8)

    Das sei Dir und den Kindern gegönnt ;)

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

    • HansJ54
    • 25. August 2022 um 13:36

    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!

    AutoIt
    ; Spezial-Sortierung Array nach Software-Versionsnummern
    
    #include "ArrayPlus.au3"
    Local $aVersionsAndReleases[][] = [["999.2.8.9", "Release #1"],["1000.2.9.10", "Release #3"],["0.2.8.10", "Release #9"],["0.2.8.9999", _
        "Release #10"],["0.2.8.19999", "Release #10"], ["0.2.8.10", "Release #2"],["0.3", "Release #5"],["0.39999.101", "Release #5"], _
        ["0.3.9999", "Release #5"],["0.2.8.10", "Release #29"]]
    _ArraySortFlexible($aVersionsAndReleases, _MyCompare)
    _ArrayDisplay($aVersionsAndReleases)
    Func _MyCompare(ByRef $A, ByRef $B) ; user defined comparison function for user-defined sorting
        Local Static $h_DLL_Shlwapi = DllOpen("Shlwapi.dll")
        Return -DllCall($h_DLL_Shlwapi, "int", "StrCmpLogicalW", "wstr", $A[0], "wstr", $B[0])[0]
    EndFunc   ;==>_MyCompare
    Alles anzeigen

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

    • HansJ54
    • 25. August 2022 um 09:43

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

    AutoIt
    Opt('MustDeclareVars', 1)
    #include <Array.au3>
    #include <MsgBoxConstants.au3>
    
    Global $sBrowserVersionsFile = @ScriptFullPath  ; testweise mal auf eine nicht vorhandene Datei setzen c:\temp\test.ini
    _BrowserVersions($sBrowserVersionsFile)
    
    Func _BrowserVersions($sIni)
        Global $aErgebnis = Ini2Array($sIni, True, True, False, "---") ; sort sections and keys, no transpose, empty = "---"
        If @error Then Return SetError(@error, 0, MsgBox($MB_TOPMOST, "_BrowserVersions()", "Ini-Datei nicht ok!"))
        $aErgebnis[0][0] = "Client"
        ; Zeile "Latest" mit der aktuellsten vorhandenen Version auffüllen
        Local $aRowLatest = _ArrayFindAll($aErgebnis, "Latest-->") ; row for latest version
        If @error = 0 Then
            For $i = 1 To UBound($aErgebnis, $UBOUND_COLUMNS) - 1
                $aErgebnis[$aRowLatest[0]][$i] = _ArrayMax($aErgebnis, 0, 1, $aRowLatest[0], $i)
            Next
        EndIf
        _ArrayDisplay($aErgebnis, "Browser- und WebDriver-Versionen", "1:", $ARRAYDISPLAY_NOROW + $ARRAYDISPLAY_COLALIGNCENTER, Default, _ArrayToString($aErgebnis, "|", 0, 0))
    EndFunc
    
    Func Ini2Array($sIni, $bSortSections = False, $bSortKeys = False, $bTranspose = False, $sEmptyField = "---") ;Habe auch mal den "Füller" für leere Felder Optional gemacht, nicht jeder mag das dort etwas drin steht obwohl dort nix drin steht^^
        Local $sSection
        Local $aSectionNames = IniReadSectionNames($sIni)
        If @error Then Return SetError(@error, 0, 0)
        Local $aKeys = IniGetAllKeys($sIni)
        Local $aResult[$aSectionNames[0] + 1][$aKeys[0] + 1]
    
        ; Das Sortieren ist kritisch, wenn ein Schlüssel Zahlen enthält passt das ganz so nicht mehr, daher geändert.
        If $bSortSections Then _ArraySort($aSectionNames, Default, 1)
        If $bSortKeys Then _ArraySort($aKeys, Default, 1)
    
        For $I = 1 To $aKeys[0]
            $aResult[0][$I] = $aKeys[$I]
        Next
    
        For $I = 1 To $aSectionNames[0]
            $sSection = $aSectionNames[$I]
            $aResult[$I][0] = $sSection
            For $J = 1 To $aKeys[0]
                $aResult[$I][$J] = IniRead($sIni, $sSection, $aKeys[$J], $sEmptyField)
            Next
        Next
        If $bTranspose Then _ArrayTranspose($aResult)
        Return $aResult
    Endfunc
    
    Func IniGetAllKeys($sIni)
        Local $sData = "|"
        Local $aSectionNames = IniReadSectionNames($sIni)
        If @error Then Return SetError(@error, 0, 0)
    
        For $i = 1 To $aSectionNames[0]
            Local $aInhalt = IniReadSection($sIni, $aSectionNames[$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)
        Local $aKeys[0]
        _ArrayAdd($aKeys, $sData)
        $aKeys[0] = Ubound($aKeys) - 1 ;Lieber direkt die Anzahl mit übergeben, da hier so oder so Zeile 0 leer ist
        Return $aKeys
    EndFunc
    
    #Region eingebettete INI
    #cs
    [Latest-->]
    [BLP1-WX]
    EdgeVersion=99.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
    [Server]
    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
    Test=1234
    [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
  • Ini2Array() : Ini-Datei in Array einlesen + IniGetAllKeys() : Array mit allen vorkommenden Keys einer Ini-Datei erzeugen

    • HansJ54
    • 24. August 2022 um 18:05

    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?

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

    • HansJ54
    • 24. August 2022 um 13:34

    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.

    AutoIt
    #include <Array.au3>
    Global $sIniDatei = @ScriptFullPath
    Global $aErgebnis = Ini2Array($sIniDatei, True, True, False) ; 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", "1:", $ARRAYDISPLAY_NOROW + $ARRAYDISPLAY_COLALIGNCENTER, Default, _ArrayToString($aErgebnis, "|", 0, 0))
    
    Func Ini2Array($sIni, $bSortSections, $bSortKeys, $bTranspose)
        Local $aSectionNames = IniReadSectionNames($sIni)
        If @error Then Return SetError(@error, 0, 0)
        Local $aKeys = IniGetAllKeys($sIni)
           If $bSortSections Then _ArraySort($aSectionNames)
        If $bSortKeys Then _ArraySort($aKeys)
        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
        If $bTranspose Then _ArrayTranspose($aResult)
        Return $aResult
    Endfunc
    
    Func IniGetAllKeys($sIni)
        Local $sData = "|"
        Local $aSectionNames = IniReadSectionNames($sIni)
        If @error Then Return SetError(@error, 0, 0)
        For $i = 1 To $aSectionNames[0] - 1
            Local $aInhalt = IniReadSection($sIni, $aSectionNames[$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)
        Local $aKeys[0]
        _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

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™